Events
{{ events.results.size }} / {{ events.total_entries }}
diff --git a/pos-module-core/modules/core/public/views/partials/events/show.liquid b/pos-module-core/modules/core/public/views/partials/events/show.liquid
index 2561104..665a505 100644
--- a/pos-module-core/modules/core/public/views/partials/events/show.liquid
+++ b/pos-module-core/modules/core/public/views/partials/events/show.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
Event
-
<< List
+
<< List
{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-core/modules/core/public/views/partials/lib/commands/email/send.liquid
index e6ad1be..f03248b 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/commands/email/send.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
function object = 'modules/core/commands/email/send/build', object: object
@@ -8,8 +11,8 @@
if r.errors
log r.errors, type: 'errors.graphql.invalid'
- hash_assign object['valid'] = false
- hash_assign object['errors'] = r.errors
+ assign object.valid = false
+ assign object.errors = r.errors
endif
else
log object.errors, type: 'payload validation error in core: lib/commands/email'
diff --git a/pos-module-core/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-core/modules/core/public/views/partials/lib/commands/email/send/check.liquid
index 83f4269..50c8aec 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/commands/email/send/check.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -1,13 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-core/modules/core/public/views/partials/lib/commands/hook/alter.liquid
index 3418a8a..43fbfa5 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/commands/hook/alter.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix and _alter suffix.
- params_to_modify: object
- the object that will be passed to the alter hook to modify
- params: object
- the object that will be passed to the alter hook to give extra information
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
assign original_params = params_to_modify | deep_clone
@@ -17,6 +14,6 @@
function _ = implementation.path, params_to_modify: params_to_modify, params: params
endfor
- assign result = '{}' | parse_json | hash_merge: original_params: original_params
+ assign result = { "original_params": original_params }
return result
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-core/modules/core/public/views/partials/lib/commands/hook/fire.liquid
index 5af969b..48cd149 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/commands/hook/fire.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -1,16 +1,13 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix.
- params: object
- the object to pass to the fired hook
- merge_to_object boolean
- merge the result objects to one object or collect them in an array
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
{% liquid
if merge_to_object
- assign results = '{}' | parse_json
+ assign results = {}
else
- assign results = '[]' | parse_json
+ assign results = []
endif
assign hook = '/hook_' | append: hook
@@ -24,7 +21,7 @@
endcomment
if hook_result[0]
for h_result in hook_result
- assign results = results | add_to_array: h_result
+ assign results << h_result
endfor
comment
Check if the result is an object.
@@ -32,7 +29,7 @@
elsif hook_result.first and merge_to_object
assign results = results | hash_merge: hook_result
else
- assign results = results | add_to_array: hook_result
+ assign results << hook_result
endif
endif
endfor
diff --git a/pos-module-core/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-core/modules/core/public/views/partials/lib/commands/variable/set.liquid
index ddf03fb..dc2577b 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/commands/variable/set.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -1,8 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - value string
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
graphql result = 'modules/core/variable/set', name: name, value: value
diff --git a/pos-module-core/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-core/modules/core/public/views/partials/lib/helpers/register_error.liquid
index 2f252ef..f016b3e 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/helpers/register_error.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -1,11 +1,9 @@
-{% comment %}
- @params
- contract - { errors: {}, valid: true }
- field_name
- message:
- key: i18n to be resolved into message
-{% endcomment %}
-
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
assign key = key | default: null
assign message = message | default: null
@@ -17,11 +15,12 @@
assign errors = contract.errors
- assign field_errors = errors[field_name] | default: '[]' | parse_json
- assign field_errors = field_errors | add_to_array: msg
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
- hash_assign errors[field_name] = field_errors
- hash_assign contract['valid'] = false
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
return contract
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
index e1ef6d8..72607a4 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -1,6 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
{% liquid
log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
- function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
assign results = headscript_implementations | join: ''
return results | html_safe
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/hook/search.liquid
index da311bb..f97ad06 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/hook/search.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -1,10 +1,6 @@
-{% comment %}
- Get a list of all hook impltementation paths.
- Params:
- - hook: string
- the hook's name with '/' prefix for example '/hook_user_create'.
-{% endcomment %}
-
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
{% liquid
log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
graphql implementations = 'modules/core/hook/search', hook: hook
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/module/exists.liquid
index c91e5f1..9801f78 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/module/exists.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -1,9 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - type string (optional)
- it can be: module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
function modules = 'modules/core/lib/queries/registry/search', type: type
assign module = modules | array_detect: machine_name: name
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/registry/get.liquid
index 14e34d1..adbdeda 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/registry/get.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function registry = 'modules/core/lib/queries/registry/search', type: type
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/registry/search.liquid
index 9c2cb22..ae8f96c 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/registry/search.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -1,25 +1,23 @@
-{% comment %}
- Required params:
- - type string
- it can be: all, module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
- function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
case type
when 'module'
- assign modules = '[]' | parse_json
+ assign modules = []
for module in registry
if module.type == 'module'
- assign modules = modules | add_to_array: module
+ assign modules << module
endif
endfor
return modules
when 'theme'
- assign themes = '[]' | parse_json
+ assign themes = []
for module in registry
if module.type == 'theme'
- assign themes = themes | add_to_array: module
+ assign themes << module
endif
endfor
return themes
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/variable/find.liquid
index b7012e3..c2ec54c 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/variable/find.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- Required params:
- - name string
- - default any
- the default vaue of the variable
- - type string (optional)
- it can be: array, integer, float, boolean, object
-{% endcomment %}
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
{% liquid
assign value = context.constants[name] | default: default, allow_false: true
diff --git a/pos-module-core/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-core/modules/core/public/views/partials/lib/queries/variable/get.liquid
index 6651eb2..f6ba482 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/queries/variable/get.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/date.liquid
index 206eccf..e4d6a7b 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/date.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/date.liquid
@@ -1,10 +1,21 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @date
- @can_be_past
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
assign date = date | default: object[field_name] | to_date
@@ -20,12 +31,12 @@
if can_be_past == false and is_past
assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if can_be_future == false and is_future
assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lt != null
@@ -33,7 +44,7 @@
if date >= lt
assign localized_date = lt | l
assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -42,7 +53,7 @@
if date > lte
assign localized_date = lte | l
assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -51,7 +62,7 @@
if date <= gt
assign localized_date = gt | l
assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -60,7 +71,7 @@
if date < gte
assign localized_date = gte | l
assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/each_element_length.liquid
index 371c397..2c7f107 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/each_element_length.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -1,11 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
for el in object[field_name]
@@ -14,18 +14,18 @@
if minimum != null and size < minimum
assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
assign message = el | append: ' ' | append: message
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endfor
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/elements_included.liquid
index ef06223..bd8035b 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/elements_included.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -1,18 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
for val in object[field_name]
unless array contains val
assign key = key | default: "modules/core/validation.array.not_included"
assign message = key | t: value: val
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endunless
endfor
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/email.liquid
index 2248f8f..6699b19 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/email.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/email.liquid
@@ -1,16 +1,15 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
assign valid_email = object[field_name] | is_email_valid
unless valid_email
assign key = key | default: "modules/core/validation.email"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/equal.liquid
index 7d5bf65..97284b8 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/equal.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -1,9 +1,12 @@
-{% comment %}
- params: @given
- @expected
- @field_name
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
if given != expected
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
index 37808b0..c86b2fc 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -1,17 +1,17 @@
-{% comment %}
- params: @field_name
- @property_name
- @property_value
- @scope_name
- @scope_value
- @exclude_name
- @exclude_value
- @ids
- @not_ids
- @table
- @key
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
assign property_name = property_name | default: ''
@@ -26,7 +26,7 @@
assign count = r.records.total_entries
if count == 0
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
index f936542..7693b5a 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @hcaptcha_params
- @key
- @c
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
assign hcaptcha_solved = hcaptcha_params | hcaptcha
unless hcaptcha_solved
assign key = key | default: "modules/core/validation.hcaptcha"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
endunless
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/included.liquid
index a194d71..85b4d16 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/included.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/included.liquid
@@ -1,17 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
unless array contains value
assign key = key | default: "modules/core/validation.not_included"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/length.liquid
index 2e440d5..403a064 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/length.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/length.liquid
@@ -1,14 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
- @message_minimum
- @message_maximum
- @message_is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
@@ -23,23 +26,23 @@
if allow_blank != true
if size == blank
assign message = message_blank | default: 'modules/core/validation.length.blank' | t
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
if minimum != null and size < minimum
assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/matches.liquid
index 9127098..fb47b05 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/matches.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -1,10 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @regexp
- @c
- @message
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
if allow_blank and object[field_name] == blank
@@ -14,7 +15,7 @@
assign matches = object[field_name] | matches: regexp
if matches != true
assign message = message | default: 'modules/core/validation.matches' | t
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/not_null.liquid
index f7bb4c6..23d6bd0 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/not_null.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
if object[field_name] == null
assign key = key | default: "modules/core/validation.null"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/number.liquid
index 77368ba..6a11fe0 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/number.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/number.liquid
@@ -1,15 +1,22 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @number
- @lt - less than
- @lte - less than or equal
- @gt - greater than
- @gte - greater than or equal
- @eq - equal
- @ne - not equal
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
{% liquid
assign number = number | default: object[field_name]
log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
@@ -19,7 +26,7 @@
{% liquid
if test1 != test2
assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
return c
endif
@@ -28,7 +35,7 @@
if lt != null and number >= lt
assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lte == blank
@@ -36,27 +43,27 @@
endif
if number > lte
assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gt != null and number <= gt
assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gte != null and number < gte
assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if eq != null and number != eq
assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if ne != null and number == ne
assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/password_complexity.liquid
index d5848f6..04bb51c 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/password_complexity.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -1,33 +1,31 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
assign decoded_pw = object.password
- function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", context: context
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
if complex_password
assign has_lowercase = decoded_pw | matches: '[a-z]'
unless has_lowercase
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
endunless
assign has_uppercase = decoded_pw | matches: '[A-Z]'
unless has_uppercase
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
endunless
assign has_number = decoded_pw | matches: '\d'
unless has_number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
endunless
endif
- function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: key: 'modules/core/validation.too_short', allow_blank: null
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/presence.liquid
index 5d34276..06862bd 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/presence.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
if object[field_name] == blank
assign key = key | default: "modules/core/validation.blank"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/truthy.liquid
index 0efd280..9b2a93e 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/truthy.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
unless object[field_name]
assign key = key | default: "modules/core/validation.not_truthy"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/unique_elements.liquid
index 3eb74e5..f052483 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/unique_elements.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -1,18 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
assign unique_count = object[field_name] | uniq | size
if unique_count != object[field_name].size
assign key = key | default: 'modules/core/validation.array.not_unique'
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/uniqueness.liquid
index 3942836..66d62c7 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/uniqueness.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -1,3 +1,12 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
assign key = key | default: 'modules/core/validation.taken'
@@ -22,7 +31,7 @@
assign count = r.records.total_entries
if count > 0
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
endif
return c
diff --git a/pos-module-core/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-core/modules/core/public/views/partials/lib/validations/valid_object.liquid
index 7b1b317..690addf 100644
--- a/pos-module-core/modules/core/public/views/partials/lib/validations/valid_object.liquid
+++ b/pos-module-core/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -1,19 +1,19 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @check_function
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
if value
function check_object = check_function, object: value
if check_object.valid != true
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
assign errors_key = field_name | append: '_errors'
- hash_assign c['errors'][errors_key] = check_object.errors
+ assign c.errors[errors_key] = check_object.errors
endif
endif
diff --git a/pos-module-core/modules/core/template-values.json b/pos-module-core/modules/core/template-values.json
index 87ab94b..19f3315 100644
--- a/pos-module-core/modules/core/template-values.json
+++ b/pos-module-core/modules/core/template-values.json
@@ -2,6 +2,6 @@
"name": "Pos Module Core",
"machine_name": "core",
"type": "module",
- "version": "2.0.7",
+ "version": "2.1.6",
"dependencies": {}
}
diff --git a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/build.liquid b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/build.liquid
index 44ec47d..4d940e9 100644
--- a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/build.liquid
+++ b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/build.liquid
@@ -1,14 +1,14 @@
{%- liquid
- assign result = '{}' | parse_json
+ assign result = {}
if object.records_filter
- hash_assign result['records_filter'] = null | hash_merge: filter: object.records_filter
+ assign result.records_filter = {"filter": object.records_filter}
endif
if object.users_filter
- hash_assign result['users_filter'] = null | hash_merge: filter: object.users_filter
+ assign result.users_filter = {"filter": object.users_filter}
endif
if object.encryption
- hash_assign result['encryption'] = object.encryption
+ assign result.encryption = object.encryption
endif
return result
-%}
+ %}
diff --git a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/check.liquid b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/check.liquid
index b7d1cfd..f53cdf1 100644
--- a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/check.liquid
+++ b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/create/check.liquid
@@ -1,7 +1,8 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- assign object = object | hash_merge: valid: c.valid, errors: c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/build.liquid b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/build.liquid
index 7527759..e27c6b3 100644
--- a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/build.liquid
+++ b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/build.liquid
@@ -1,6 +1,5 @@
{%- liquid
- assign result = '{}' | parse_json
- hash_assign result['id'] = object.id
+ assign result = { "id": object.id }
return result
-%}
+ %}
diff --git a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/check.liquid b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/check.liquid
index fe45555..8b23983 100644
--- a/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/check.liquid
+++ b/pos-module-data-export-api/modules/data_export_api/public/lib/commands/data_exports/delete/check.liquid
@@ -1,9 +1,10 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- assign object = object | hash_merge: valid: c.valid, errors: c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-data-export-api/modules/data_export_api/public/lib/shared/authorize.liquid b/pos-module-data-export-api/modules/data_export_api/public/lib/shared/authorize.liquid
index fcc7cd4..f859fdd 100644
--- a/pos-module-data-export-api/modules/data_export_api/public/lib/shared/authorize.liquid
+++ b/pos-module-data-export-api/modules/data_export_api/public/lib/shared/authorize.liquid
@@ -1,10 +1,10 @@
{%- liquid
function api_key = 'modules/core/queries/variable/find', name: '_data_export_api_key', type: 'string'
function whitelisted_ips = 'modules/core/queries/variable/find', name: '_data_export_whitelisted_ips', type: 'array'
- assign errors = '[]' | parse_json
+ assign errors = []
if api_key != context.headers.HTTP_API_KEY
- assign errors = errors | array_add: "API_KEY header invalid"
+ assign errors << "API_KEY header invalid"
endif
if whitelisted_ips != blank
@@ -13,7 +13,7 @@
if whitelisted_ips contains ip
else
assign message = "IP address not allowed"
- assign errors = errors | array_add: message
+ assign errors << message
endif
endif
-%}
diff --git a/pos-module-data-export-api/modules/data_export_api/template-values.json b/pos-module-data-export-api/modules/data_export_api/template-values.json
index 250e6d2..1b744f6 100644
--- a/pos-module-data-export-api/modules/data_export_api/template-values.json
+++ b/pos-module-data-export-api/modules/data_export_api/template-values.json
@@ -2,7 +2,7 @@
"name": "pos-module-data-export-api",
"machine_name": "data_export_api",
"type": "module",
- "version": "0.1.1",
+ "version": "0.2.0",
"dependencies": {
"core": "^1.5.0"
}
diff --git a/pos-module-oauth-facebook/modules/core/generators/command/index.js b/pos-module-oauth-facebook/modules/core/generators/command/index.js
new file mode 100644
index 0000000..29fb67e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/command/index.js
@@ -0,0 +1,46 @@
+import Generator from 'yeoman-generator';
+import path from 'path';
+import pluralize from 'pluralize';
+import fs from 'fs';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate basic command files with build and check phase';
+ this.argument('commandName', { type: String, required: true, description: 'name of the command' });
+ this.props = {
+ commandName: this.options.commandName,
+ actionName: this.options.commandName.split('/').pop(),
+ modelName: this.options.commandName.split('/')[0]
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create.liquid'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}.liquid`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create/'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}/`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./graphql/create.graphql'),
+ this.destinationPath(`app/graphql/${this.props.commandName}.graphql`),
+ this.props
+ )
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('Command generated');
+ }
+};
diff --git a/pos-module-oauth-facebook/modules/core/generators/command/templates/graphql/create.graphql b/pos-module-oauth-facebook/modules/core/generators/command/templates/graphql/create.graphql
new file mode 100644
index 0000000..0ffb1e5
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/command/templates/graphql/create.graphql
@@ -0,0 +1,20 @@
+mutation <%= actionName %>(
+ # some arguments
+ # $foo: String!
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ # { name: "foo" property: $foo }
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ # foo: (name: "foo")
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create.liquid b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create.liquid
new file mode 100644
index 0000000..6d7102e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= commandName %>/build', object: object
+ function object = 'commands/<%= commandName %>/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= commandName %>' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/build.liquid b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/build.liquid
new file mode 100644
index 0000000..1fc2591
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/build.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign data = {"id": object.id, "name": object.name}
+ return data
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/check.liquid b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/check.liquid
new file mode 100644
index 0000000..2c53a6c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/command/templates/lib/commands/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/index.js b/pos-module-oauth-facebook/modules/core/generators/crud/index.js
new file mode 100644
index 0000000..dd839bc
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/index.js
@@ -0,0 +1,116 @@
+import Generator from 'yeoman-generator';
+import pluralize from 'pluralize';
+import startCase from 'lodash.startcase';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate table definition and commands for CRUD with graphql files';
+ this.argument('modelName', { type: String, required: true, description: 'name of the table' });
+ this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: "[]" });
+ this.option('include-views', { type: Boolean, default: false, description: 'generate pages and partials', hide: 'no' });
+
+ const attributes = this.options.attributes.map((attr) => {
+ const values = attr.split(':');
+ return {
+ name: values[0],
+ nameHuman: startCase(values[0]),
+ type: values[1]
+ };
+ });
+ this.props = {
+ modelName: this.options.modelName,
+ modelNamePlural: pluralize(this.options.modelName),
+ attributes: attributes,
+ graphqlArgumentMap: {
+ string: "String",
+ text: "String",
+ integer: "Int",
+ boolean: "Boolean",
+ float: "Float",
+ date: "String",
+ datetime: "String",
+ array: "[String]"
+ },
+ graphqlArgumentValueMap: {
+ string: "value",
+ text: "value",
+ integer: "value_int",
+ boolean: "value_boolean",
+ float: "value_float",
+ date: "value",
+ datetime: "value",
+ array: "value_array"
+ },
+ graphqlPropertyMap: {
+ string: "property",
+ text: "property",
+ integer: "property_int",
+ boolean: "property_boolean",
+ float: "property_float",
+ date: "property",
+ datetime: "property",
+ array: "property_array"
+ }
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./translations/model.yml'),
+ this.destinationPath(`app/translations/en/${this.props.modelNamePlural}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./schema/model.yml'),
+ this.destinationPath(`app/schema/${this.props.modelName}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./graphql/*.graphql'),
+ this.destinationPath(`app/graphql/${this.props.modelNamePlural}/`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/queries/model'),
+ this.destinationPath(`app/lib/queries/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/model'),
+ this.destinationPath(`app/lib/commands/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./config.yml'),
+ this.destinationPath(`app/config.yml`),
+ this.props
+ )
+ if(this.options['include-views']){
+ this.fs.copyTpl(
+ this.templatePath('./views/pages/model'),
+ this.destinationPath(`app/views/pages/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/model'),
+ this.destinationPath(`app/views/partials/theme/simple/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/field_error.liquid'),
+ this.destinationPath(`app/views/partials/theme/simple/field_error.liquid`),
+ this.props
+ )
+ }
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('CRUD generated');
+ }
+};
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/config.yml b/pos-module-oauth-facebook/modules/core/generators/crud/templates/config.yml
new file mode 100644
index 0000000..45cd4ce
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/config.yml
@@ -0,0 +1,16 @@
+---
+escape_output_instead_of_sanitize: true
+graphql_argument_type_mismatch_mode: 'error'
+liquid_add_old_variables: false
+liquid_check_mode: 'error'
+liquid_raise_mode: true
+require_table_for_record_delete_mutation: true
+safe_translate: true
+skip_elasticsearch: false
+slug_exact_match: true
+websockets_require_csrf_token: true
+maintenance:
+ enabled: false
+ password_constant: 'MAINTENANCE_PASSWORD'
+ partial: 'maintenance'
+---
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/create.graphql b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/create.graphql
new file mode 100644
index 0000000..67905af
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/create.graphql
@@ -0,0 +1,25 @@
+mutation create_<%= modelName %>(
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>!
+<% }); -%>
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/delete.graphql b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/delete.graphql
new file mode 100644
index 0000000..c77948f
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/delete.graphql
@@ -0,0 +1,6 @@
+mutation delete($id: ID!) {
+ record: record_delete(
+ table: "<%= modelName %>"
+ id: $id
+ ){ id }
+}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/search.graphql b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/search.graphql
new file mode 100644
index 0000000..a22b2fd
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/search.graphql
@@ -0,0 +1,39 @@
+query search(
+ $id: ID
+ $limit: Int = 20
+ $page: Int = 1
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: String
+<% }); -%>
+) {
+ <%= modelNamePlural %>: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "<%= modelName %>" }
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" value: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ sort: [
+ { created_at: { order: DESC }}
+ ]
+ ){
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/update.graphql b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/update.graphql
new file mode 100644
index 0000000..73e4556
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/graphql/update.graphql
@@ -0,0 +1,27 @@
+mutation update_<%= modelName %>(
+ $id: ID!
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>
+<% }); -%>
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ updated_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create.liquid
new file mode 100644
index 0000000..26b0a03
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/create' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
new file mode 100644
index 0000000..caf4d8d
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
new file mode 100644
index 0000000..1ce0a60
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete/check.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
similarity index 52%
rename from pos-module-reports/modules/profile/public/lib/commands/profiles/delete/check.liquid
rename to pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
index 67e2c81..4fada40 100644
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete/check.liquid
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
@@ -1,9 +1,10 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "valid": true, "errors": {} }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update.liquid
new file mode 100644
index 0000000..29a229c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/update/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/update' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
new file mode 100644
index 0000000..cffe564
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
@@ -0,0 +1,13 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/find.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/find.liquid
new file mode 100644
index 0000000..7f84e12
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/find.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = '<%= modelNamePlural %>/search', id: id, limit: 1
+
+ return r.<%= modelNamePlural %>.results.first
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/search.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/search.liquid
new file mode 100644
index 0000000..369ec37
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/lib/queries/model/search.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ graphql r = '<%= modelNamePlural %>/search', limit: limit, page: 1
+ return r.<%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/schema/model.yml b/pos-module-oauth-facebook/modules/core/generators/crud/templates/schema/model.yml
new file mode 100644
index 0000000..380c67b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/schema/model.yml
@@ -0,0 +1,6 @@
+name: <%= modelName %>
+properties:
+<% attributes.forEach((attr) => { -%>
+ - name: <%= attr.name %>
+ type: <%= attr.type %>
+<% }); -%>
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/translations/model.yml b/pos-module-oauth-facebook/modules/core/generators/crud/templates/translations/model.yml
new file mode 100644
index 0000000..879b076
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/translations/model.yml
@@ -0,0 +1,15 @@
+en:
+ app:
+ <%= modelNamePlural %>:
+ new:
+ new: New <%= modelName %>
+ edit:
+ edit: Edit <%= modelName %>
+ list:
+ add: Add <%= modelName %>
+ empty_state: You haven't added any <%= modelNamePlural %> yet.
Create your first one now!
+ edit: Edit
+ attr:
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= attr.nameHuman %>
+ <% }); -%>
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/create.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/create.liquid
new file mode 100644
index 0000000..cf27c95
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/create.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: post
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ endif
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/delete.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/delete.liquid
new file mode 100644
index 0000000..bb26a02
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/delete.liquid
@@ -0,0 +1,16 @@
+---
+slug: <%= modelNamePlural %>
+method: delete
+---
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+ function object = 'commands/<%= modelNamePlural %>/delete', object: object
+
+ # platformos-check-disable ConvertIncludeToRender
+ if object.valid
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', notice: 'modules/core/common.deleted'
+ else
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', error: 'modules/core/common.delete_failed'
+ endif
+ # platformos-check-enable ConvertIncludeToRender
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/edit.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/edit.liquid
new file mode 100644
index 0000000..b098d38
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/edit.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/index.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/index.liquid
new file mode 100644
index 0000000..75290a7
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/index.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function <%= modelNamePlural %> = 'queries/<%= modelNamePlural %>/search', limit: 100
+
+ render 'theme/simple/<%= modelNamePlural %>/index', <%= modelNamePlural %>: <%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/new.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/new.liquid
new file mode 100644
index 0000000..43c1b24
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/new.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign object = {}
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/show.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/show.liquid
new file mode 100644
index 0000000..c9672cc
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/show.liquid
@@ -0,0 +1,13 @@
+---
+slug: <%= modelNamePlural %>/:id
+---
+{% liquid
+
+ assign <%= modelName %>_id = context.params.id | split: '-' | last
+ function <%= modelName %> = 'queries/<%= modelNamePlural %>/find', id: <%= modelName %>_id
+ if <%= modelName %>.id
+ render 'theme/simple/<%= modelNamePlural %>/show', <%= modelName %>: <%= modelName %>
+ else
+ response_status 404
+ endif
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/update.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/update.liquid
new file mode 100644
index 0000000..06644bd
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/pages/model/update.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: put
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+ endif
+%}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
new file mode 100644
index 0000000..16d306b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
@@ -0,0 +1,5 @@
+{% if errors %}
+
+ {{ errors | join: ', ' }}
+
+{% endif %}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
new file mode 100644
index 0000000..6bd91f2
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
@@ -0,0 +1,5 @@
+
+
{{ 'app.<%= modelNamePlural %>.edit.edit' | t }} {{ object.name }}
+
+
+{% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
new file mode 100644
index 0000000..5abe317
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
@@ -0,0 +1,9 @@
+
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
new file mode 100644
index 0000000..e12d1ee
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
@@ -0,0 +1,27 @@
+{% liquid
+ if object.id
+ assign method = 'put'
+ else
+ assign method = 'post'
+ endif
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
new file mode 100644
index 0000000..352f7a0
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
@@ -0,0 +1,49 @@
+
+
+
+ {% if <%= modelNamePlural %>.results.size > 0 %}
+
+
+
+<% attributes.forEach((attr) => { -%>
+
+ {{ "app.<%= modelNamePlural %>.attr.<%= attr.name %>" | t }}
+
+<% }); -%>
+
+
+
+ {% for <%= modelName %> in <%= modelNamePlural %>.results %}
+
+<% attributes.forEach((attr) => { -%>
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+<% }); -%>
+
+
+ {{ 'app.<%= modelNamePlural %>.list.edit' | t }}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ {% render 'theme/simple/<%= modelNamePlural %>/empty_state' %}
+ {% endif %}
+
+
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
new file mode 100644
index 0000000..e15a8d4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
@@ -0,0 +1,4 @@
+
+
{{ 'app.<%= modelNamePlural %>.new.new' | t }}
+ {% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
+
diff --git a/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
new file mode 100644
index 0000000..483dd89
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
@@ -0,0 +1,15 @@
+
+
+ <%= modelName %> - {{ <%= modelName %>.id }}
+
+
+ <% attributes.forEach((attr) => { -%>
+
+ {{ 'app.<%= modelNamePlural %>.attr.<%= attr.name %>' | t }}
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+ <% }); -%>
+
diff --git a/pos-module-oauth-facebook/modules/core/package-lock.json b/pos-module-oauth-facebook/modules/core/package-lock.json
new file mode 100644
index 0000000..655962c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/package-lock.json
@@ -0,0 +1,3225 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "license": "MIT",
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "node_modules/@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "4.2.10"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ }
+ },
+ "node_modules/@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=16.18.26",
+ "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0",
+ "mem-fs": "^3.0.0 || ^4.0.0-beta.1",
+ "mem-fs-editor": "^10.0.2 || >=10.0.2"
+ },
+ "peerDependenciesMeta": {
+ "@yeoman/adapter": {
+ "optional": true
+ },
+ "mem-fs": {
+ "optional": true
+ },
+ "mem-fs-editor": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
+ "node_modules/auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ },
+ "bin": {
+ "auto-changelog": "src/index.js"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "version-range": "^4.15.0"
+ },
+ "engines": {
+ "ecmascript": ">= es5",
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "license": "ISC"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "license": "MIT"
+ },
+ "node_modules/isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "license": "MIT",
+ "dependencies": {
+ "package-json": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ },
+ "acceptDependencies": {
+ "isbinaryfile": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "mem-fs": "^4.0.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "license": "MIT",
+ "dependencies": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true,
+ "bin": {
+ "parse-github-url": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "license": "ISC"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/npm-conf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "license": "ISC"
+ },
+ "node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
+ "dependencies": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18.18.5",
+ "@yeoman/types": "^1.1.1",
+ "mem-fs": "^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
+ },
+ "@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "requires": {
+ "debug": "^4.1.1"
+ }
+ },
+ "@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
+ },
+ "@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "peer": true,
+ "requires": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "requires": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "requires": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "requires": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "requires": {
+ "@octokit/types": "^14.0.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "requires": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "requires": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="
+ },
+ "@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "requires": {
+ "graceful-fs": "4.2.10"
+ }
+ },
+ "@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "requires": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ }
+ },
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
+ },
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
+ },
+ "@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
+ },
+ "@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "peer": true,
+ "requires": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
+ },
+ "@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "requires": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA=="
+ },
+ "@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "peer": true,
+ "requires": {}
+ },
+ "array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="
+ },
+ "array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
+ },
+ "async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="
+ },
+ "auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "requires": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ }
+ },
+ "b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "requires": {}
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "requires": {}
+ },
+ "before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+ },
+ "binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+ },
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "requires": {
+ "version-range": "^4.15.0"
+ }
+ },
+ "ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "requires": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
+ },
+ "fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ }
+ },
+ "fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="
+ },
+ "first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ=="
+ },
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ },
+ "github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "requires": {
+ "@octokit/rest": "^21.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "requires": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "requires": {
+ "lru-cache": "^10.0.1"
+ }
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
+ },
+ "ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="
+ },
+ "index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+ },
+ "isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "requires": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="
+ },
+ "latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "requires": {
+ "package-json": "^10.0.0"
+ }
+ },
+ "lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "peer": true,
+ "requires": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ }
+ },
+ "mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "peer": true,
+ "requires": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "requires": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "requires": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "requires": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ }
+ },
+ "parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "requires": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ }
+ },
+ "read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "dependencies": {
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "requires": {
+ "@pnpm/npm-conf": "^3.0.2"
+ }
+ },
+ "registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "requires": {
+ "rc": "1.2.8"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
+ },
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
+ "simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "requires": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ }
+ },
+ "slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
+ },
+ "sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "requires": {
+ "is-plain-obj": "^4.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="
+ },
+ "streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "requires": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "requires": {
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "requires": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ },
+ "teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "requires": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "requires": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
+ },
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
+ },
+ "universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg=="
+ },
+ "vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "requires": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ }
+ },
+ "vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "requires": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "peer": true,
+ "requires": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ }
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/package.json b/pos-module-oauth-facebook/modules/core/package.json
new file mode 100644
index 0000000..49515a0
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "description": "Module description",
+ "type": "module",
+ "scripts": {
+ "version": "(cd ../../ && pos-cli modules version core -p) && git add template-values.json && auto-changelog -p && git add CHANGELOG.md"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Platform-OS/pos-module-core.git"
+ },
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Platform-OS/pos-module-core/issues"
+ },
+ "homepage": "https://github.com/Platform-OS/pos-module-core#readme",
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ },
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "auto-changelog": {
+ "template": "changelog-template.hbs",
+ "unreleased": true,
+ "commitLimit": false
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/api_calls/generic.liquid b/pos-module-oauth-facebook/modules/core/public/api_calls/generic.liquid
new file mode 100644
index 0000000..0a3289b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/api_calls/generic.liquid
@@ -0,0 +1,6 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{{ data.payload }}
diff --git a/pos-module-oauth-facebook/modules/core/public/api_calls/generic_x_form_encoded.liquid b/pos-module-oauth-facebook/modules/core/public/api_calls/generic_x_form_encoded.liquid
new file mode 100644
index 0000000..4085222
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/api_calls/generic_x_form_encoded.liquid
@@ -0,0 +1,10 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{% liquid
+ function url = 'modules/core/helpers/hash_to_x_form_encoded', payload: data.payload
+ print url
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/emails/.keep b/pos-module-oauth-facebook/modules/core/public/emails/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/emails/generic.liquid b/pos-module-oauth-facebook/modules/core/public/emails/generic.liquid
new file mode 100644
index 0000000..240ce94
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/emails/generic.liquid
@@ -0,0 +1,13 @@
+---
+from: "{{ data.from }}"
+layout: "{{ data.layout }}"
+to: "{{ data.to }}"
+cc: "{{ data.cc }}"
+bcc: "{{ data.bcc }}"
+subject: "{{ data.subject }}"
+---
+{% liquid
+ # platformos-check-disable
+ include data.partial, data: data.data
+ # platformos-check-enable
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/.keep b/pos-module-oauth-facebook/modules/core/public/graphql/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/api_calls/send.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/api_calls/send.graphql
new file mode 100644
index 0000000..b26d03f
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/api_calls/send.graphql
@@ -0,0 +1,12 @@
+mutation ($template: String!, $data: HashObject!, $options: ApiCallSendOptions) {
+ api_call: api_call_send(
+ data: $data
+ template: { name: $template }
+ options: $options
+ ) {
+ response{ status body }
+ errors {
+ message
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/email/send.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/email/send.graphql
new file mode 100644
index 0000000..2f9fc39
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/email/send.graphql
@@ -0,0 +1,9 @@
+mutation ($data: HashObject!, $template: String!){
+ email_send(
+ template: { name: $template }
+ data: $data
+ ){
+ is_scheduled_to_send
+ errors { message }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/events/consumers.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/events/consumers.graphql
new file mode 100644
index 0000000..b13d23b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/events/consumers.graphql
@@ -0,0 +1,15 @@
+query consumers($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { contains: $name }
+ }
+ sort: {
+ path: { order: ASC }
+ }
+ ) {
+ results {
+ path
+ metadata
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/events/create.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/events/create.graphql
new file mode 100644
index 0000000..77bc1d9
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/events/create.graphql
@@ -0,0 +1,7 @@
+mutation create_event($payload: ActivityStreamsPayload!) {
+ activity_create(
+ payload: $payload
+ ) {
+ payload
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/events/events_checks.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/events/events_checks.graphql
new file mode 100644
index 0000000..c326d87
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/events/events_checks.graphql
@@ -0,0 +1,11 @@
+query events_checks($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { ends_with: $name }
+ }
+ ) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/events/search.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/events/search.graphql
new file mode 100644
index 0000000..4e78dd2
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/events/search.graphql
@@ -0,0 +1,14 @@
+query ac($limit: Int = 100 $page: Int = 1 $uuids: [String!]) {
+ activities: activities(
+ per_page: $limit,
+ page: $page
+ uuids: $uuids
+ sort: { created_at: { order: DESC } }
+ ){
+ total_entries
+ total_pages
+ results {
+ payload
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/hook/search.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/hook/search.graphql
new file mode 100644
index 0000000..37e31e2
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/hook/search.graphql
@@ -0,0 +1,7 @@
+query ($hook: String) {
+ admin_liquid_partials(filter: { path: { ends_with: $hook } }) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/records/count.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/records/count.graphql
new file mode 100644
index 0000000..9a21894
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/records/count.graphql
@@ -0,0 +1,26 @@
+query records_count(
+ $property_name: String!
+ $property_value: String!
+ $scope_name: String!
+ $scope_value: String
+ $table: String!
+ $not_ids: [ID!]
+ $ids: [ID!]
+ $exclude_name: String!
+ $exclude_value: String
+) {
+ records(
+ per_page: 1
+ filter: {
+ id: { not_value_in: $not_ids, value_in: $ids }
+ table: { value: $table }
+ properties: [
+ { name: $property_name, value: $property_value }
+ { name: $scope_name, value: $scope_value }
+ { name: $exclude_name, not_value: $exclude_value }
+ ]
+ }
+ ) {
+ total_entries
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/session/delete.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/session/delete.graphql
new file mode 100644
index 0000000..c83de59
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/session/delete.graphql
@@ -0,0 +1,5 @@
+mutation ($name: String!){
+ session_delete_field(
+ name: $name
+ )
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/session/set.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/session/set.graphql
new file mode 100644
index 0000000..9069f25
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/session/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: Any!){
+ session_create_field(
+ name: $name
+ value: $value
+ )
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/statuses/create.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/create.graphql
new file mode 100644
index 0000000..7274afc
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/create.graphql
@@ -0,0 +1,34 @@
+mutation create_status(
+ $name: String!
+ $timestamp: String!
+ $reference_id: String!
+ $reference_schema: String
+ $payload: String
+ $requester_id: String!
+) {
+ record: record_create(
+ record: {
+ table: "modules/core/status"
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "payload", value: $payload }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ ) {
+ id
+ created_at
+ deleted_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/statuses/delete.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/delete.graphql
new file mode 100644
index 0000000..fb333ab
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/delete.graphql
@@ -0,0 +1,5 @@
+mutation delete_status($id: ID!) {
+ record_delete(table: "modules/core/status", id: $id) {
+ id
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/statuses/search.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/search.graphql
new file mode 100644
index 0000000..8beffdc
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/statuses/search.graphql
@@ -0,0 +1,45 @@
+query search(
+ $id: ID
+ $limit: Int!
+ $page: Int!
+ $name: String
+ $timestamp: String
+ $reference_id: String
+ $reference_schema: String
+ $requester_id: String
+) {
+ statuses: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "modules/core/status" }
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ sort: [{ created_at: { order: DESC } }]
+ ) {
+ total_entries
+ has_next_page
+ has_previous_page
+ current_page
+
+ results {
+ id
+ created_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/graphql/variable/set.graphql b/pos-module-oauth-facebook/modules/core/public/graphql/variable/set.graphql
new file mode 100644
index 0000000..3c7b0d9
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/graphql/variable/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: String!) {
+ variable: constant_set(name: $name, value: $value) {
+ name
+ value
+ }
+}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/.keep b/pos-module-oauth-facebook/modules/core/public/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send.liquid
new file mode 100644
index 0000000..1fc5273
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/build.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/check.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/broadcast.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/broadcast.liquid
new file mode 100644
index 0000000..ec2b6bd
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/broadcast.liquid
@@ -0,0 +1,29 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ if object.type == blank
+ log 'ERROR: events broadcast type blank'
+ return null
+ endif
+ assign priorities = 'low,default,high' | split: ','
+
+ assign name = 'consumers/' | append: object.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+
+ assign object.consumers = consumers
+ for consumer in consumers
+ assign priority = 'default'
+ if priorities contains consumer.metadata.priority
+ assign priority = consumer.metadata.priority
+ endif
+ assign max_attempts = consumer.metadata.max_attempts | default: deprecated_max_attempts | default: 9
+ assign delay = consumer.metadata.delay | default: deprecated_delay | default: 0
+
+ background _id = consumer.path, event: object, priority: priority, delay: delay, max_attempts: max_attempts
+ endfor
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create.liquid
new file mode 100644
index 0000000..c32c970
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ function event = 'modules/core/commands/events/create/build', type: type, object: object
+ function event = 'modules/core/commands/events/create/check', object: event, type: type
+ if event.valid
+ function event = 'modules/core/commands/events/create/execute', object: event
+ if event.valid
+ assign source_name = 'modules/core/commands/events/create:' | append: type
+ background _job_id = 'modules/core/commands/events/broadcast', object: event, deprecated_max_attempts: deprecated_max_attempts, deprecated_delay: deprecated_delay, source_name: source_name, priority: 'high'
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+
+ return event
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/build.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/build.liquid
new file mode 100644
index 0000000..32e10ed
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/build.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign now = 'now' | to_time
+ assign data = object
+ assign data.type = type
+ assign data.date = now
+
+ return data
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/check.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/check.liquid
new file mode 100644
index 0000000..a11a644
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/check.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date', key: null
+
+ assign name = 'events/' | append: object.type
+ graphql event_check_partials = 'modules/core/events/events_checks', name: name | dig: "admin_liquid_partials", "results"
+ for partial in event_check_partials
+ assign is_event_definition = partial.path | matches: '^(modules/[^/]+/events/[^/]++|events/[^/]+)$'
+ if is_event_definition
+ assign event_check_partial = partial
+ break
+ endif
+ endfor
+
+ if event_check_partial
+ function event_result = event_check_partial.path, event: object
+ if event_result.valid != true
+ assign c.errors.object = event_result.errors
+ assign c.valid = false
+ endif
+ else
+ assign message = 'There is no such event: ' | append: object.type | append: '. Please add event check in events/' | append: object.type
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message, key: null
+ endif
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+ return object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/execute.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/execute.liquid
new file mode 100644
index 0000000..d94fff4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/create/execute.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ graphql r = 'modules/core/events/create', payload: object
+
+ assign object = r.activity_create.payload
+ assign object.valid = true
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/events/publish.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/publish.liquid
new file mode 100644
index 0000000..586ad27
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/events/publish.liquid
@@ -0,0 +1,27 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+{% enddoc %}
+{% liquid
+ if delay > 0
+ log 'use metadata.delay in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+ if max_attempts
+ log 'use metadata.max_attempts in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+
+ unless type
+ log 'type is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+ unless object
+ log 'object is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+
+ function event = "modules/core/commands/events/create", type: type, object: object, deprecated_max_attempts: max_attempts, deprecated_delay: delay
+
+ return event
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/execute.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/execute.liquid
new file mode 100644
index 0000000..e0510a4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/execute.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} mutation_name - The GraphQL mutation name
+ @param {object} object - The object to process
+ @param {string} selection - The GraphQL result selection key
+{% enddoc %}
+{% liquid
+ assign selection = selection | default: 'record'
+
+ graphql r = mutation_name, args: object
+ if r.errors
+ log r, type: "ERROR: modules/core/commands/execute"
+ endif
+
+ assign object = r[selection]
+ assign object.valid = true
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/alter.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..19f42fb
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/alter.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/fire.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..0b35c38
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/session/clear.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/clear.liquid
new file mode 100644
index 0000000..b823fa5
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/clear.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ graphql _ = 'modules/core/session/delete', name: key
+ return true
+ endif
+ return false
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/session/get.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/get.liquid
new file mode 100644
index 0000000..02b8240
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/get.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {boolean} clear - If true, clear the session value after reading
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ assign value = context.session[key] | parse_json
+ if clear
+ graphql _ = 'modules/core/session/delete', name: key
+ endif
+
+ return value
+ endif
+ return null
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/session/set.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/set.liquid
new file mode 100644
index 0000000..3441120
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/session/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | json
+ graphql _ = 'modules/core/session/set', name: key, value: value
+ return true
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create.liquid
new file mode 100644
index 0000000..dc5f46d
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create.liquid
@@ -0,0 +1,25 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/create/build', name: name, timestamp: timestamp, reference_id: reference_id, reference_schema: reference_schema, payload: payload, requester_id: requester_id
+ function object = 'modules/core/commands/statuses/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object, selection: null
+ if object.valid
+ function _ = 'modules/core/commands/events/publish', type: 'status_created', object: object, delay: delay, max_attempts: max_attempts
+ endif
+ else
+ log object, 'showme STATUS-INVALID'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/build.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/build.liquid
new file mode 100644
index 0000000..b46956a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/build.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% parse_json object %}
+ {
+ "name": {{ name | json }},
+ "timestamp": {{ timestamp | default: 'now' | to_time | json }},
+ "reference_id": {{ reference_id | json }},
+ "reference_schema": {{ reference_schema | json }},
+ "payload": {{ payload | json }},
+ "requester_id": {{ requester_id | json }}
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/check.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/check.liquid
new file mode 100644
index 0000000..61a2d21
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/create/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete.liquid
new file mode 100644
index 0000000..5c79d78
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/delete/build', id: id
+ function object = 'modules/core/commands/statuses/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/delete', selection: 'record_delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/build.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/build.liquid
new file mode 100644
index 0000000..29c1322
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/build.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ assign object = {"id": id}
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/check.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/check.liquid
new file mode 100644
index 0000000..737a3fd
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/statuses/delete/check.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/commands/variable/set.liquid b/pos-module-oauth-facebook/modules/core/public/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..cdbc3b8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/commands/variable/set.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/events/status_created.liquid b/pos-module-oauth-facebook/modules/core/public/lib/events/status_created.liquid
new file mode 100644
index 0000000..02541f7
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/events/status_created.liquid
@@ -0,0 +1,21 @@
+---
+metadata:
+ event:
+ name
+ reference_id
+ reference_schema
+ requester_id
+ payload
+---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id', key: null
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/authenticity_token.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/authenticity_token.liquid
new file mode 100644
index 0000000..6262ed4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/authenticity_token.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} authenticity_token - The authenticity token from the form
+ @param {string} token - The authenticity token value
+{% enddoc %}
+{% assign token = token | default: authenticity_token | default: context.authenticity_token %}
+{% unless token %}
+
Liquid Error AuthenticityTokenNotFound
+{% endunless %}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/flash/publish.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/flash/publish.liquid
new file mode 100644
index 0000000..cd5847d
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/flash/publish.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+{% enddoc %}
+{% liquid
+ if error and error contains 'app.'
+ assign error = error | t
+ endif
+
+ if notice and notice contains 'app.'
+ assign notice = notice | t
+ endif
+
+ if info and info contains 'app.'
+ assign info = info | t
+ endif
+%}
+
+{% parse_json flash %}
+ {
+ "error": {{ error | json }},
+ "notice": {{ notice | json }},
+ "info": {{ info | json }},
+ "from": {{ context.location.pathname | json }},
+ "now": {{ force_clear | default: false }}
+ }
+{% endparse_json %}
+
+{% liquid
+ assign sflash = flash | json
+ session sflash = sflash
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
new file mode 100644
index 0000000..05d1820
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {object} payload - The payload data
+{% enddoc %}
+{% liquid
+ assign parameters = '' | split: ','
+ for pair in payload
+ assign component = pair[0] | append: '={' | append: pair[0] | append: '}'
+ assign parameters << component
+ endfor
+ if parameters.size > 0
+ assign x_form_encoded = parameters | join: '&' | expand_url_template: payload
+ else
+ assign x_form_encoded = ''
+ endif
+
+ return x_form_encoded
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/log_time.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/log_time.liquid
new file mode 100644
index 0000000..447397a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/log_time.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {string} _start - The start time for measuring elapsed time
+ @param {string} type - The type identifier
+ @param {string} env - The environment name for logging
+{% enddoc %}
+{% liquid
+ assign _stop = 'now' | to_time
+ assign _diff = _start | time_diff: _stop
+ if env
+ log _diff, type: type, env: env
+ else
+ log _diff, type: type
+ endif
+
+ return true
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/redirect_to.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/redirect_to.liquid
new file mode 100644
index 0000000..8f14d81
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/redirect_to.liquid
@@ -0,0 +1,50 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {object} object - The object to process
+ @param {string} default - The default value
+ @param {string} format - The response format
+ @param {string} url - The URL to redirect to
+{% enddoc %}
+{% liquid
+ if url == blank and context.session.return_to != blank
+ assign url = context.session.return_to
+ session return_to = null
+ endif
+
+ if context.params.return_to != blank or context.params.redirect_to != blank and url == blank
+ assign url = context.params.return_to | default: context.params.redirect_to | url_decode
+ assign not_start_with_slash = url | matches: '^(?!\/)(.+)'
+
+ # for security reasons, we do not allow redirecting to external URLs based on unsafe user input
+ assign wrong_url = url | matches: '^\/\/'
+ if not_start_with_slash or wrong_url
+ assign url = '/'
+ endif
+ else
+ assign default = default | default: '/'
+ assign url = url | default: default
+ endif
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info, force_clear: null
+ # platformos-check-enable DeprecatedTag
+
+ if format == 'json'
+ assign response_json = {"type": "redirect", "url": url}
+ if object.valid
+ echo response_json
+ else
+ response_status 422
+ assign res = { "errors": response_json.errors }
+
+ echo res
+ endif
+
+ else
+ redirect_to url
+ endif
+
+ break
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/register_error.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_all.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_all.liquid
new file mode 100644
index 0000000..7ed01d5
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_all.liquid
@@ -0,0 +1,18 @@
+{% comment %}
+ we need the to_json | parse_json hack because time_zones.all is an array of TimeZoneDrop (not an object)
+ this prevents us from using array filters or pass the timezone as reference (return it from a function, etc)
+ should be fixed on the platform level
+{% endcomment %}
+{% comment %}
+Returns an array of timezone objects in the following format:
+{
+ "formatted_name":"(GMT-12:00) International Date Line West",
+ "formatted_offset":"-12:00",
+ "name":"International Date Line West",
+ "utc_offset":-43200,
+ "abbreviation":"-12",
+ "friendly_name_with_region":"Etc - GMT+12",
+ "friendly_name_without_region":"GMT+12"
+}
+{% endcomment %}
+{% return context.globals.time_zones.all | parse_json %}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_name.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_name.liquid
new file mode 100644
index 0000000..20f429d
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_name.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: name: name
+
+ return timezone
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_offset.liquid b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
new file mode 100644
index 0000000..478d3ae
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {number} offset
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: formatted_offset: offset
+
+ return timezone
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/hooks/.keep b/pos-module-oauth-facebook/modules/core/public/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/.keep b/pos-module-oauth-facebook/modules/core/public/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/constants/find.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/constants/find.liquid
new file mode 100644
index 0000000..84fe8d8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/constants/find.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% if context.constants %}
+ {% assign value = context.constants[name] %}
+{% else %}
+ {% graphql r, name: name %}
+ query get_constant($name: String!) {
+ constant(filter: { name: $name }) {
+ name
+ value
+ }
+ }
+ {% endgraphql %}
+ {% assign value = r.constant.value %}
+{% endif %}
+
+{% liquid
+ case type
+ when "boolean"
+ if value == "true"
+ return true
+ else
+ return false
+ endif
+ when "integer"
+ assign value = value | plus: 0
+ return value
+ when "array"
+ assign value = value | split: ','
+ return value
+ when "time"
+ return value | to_time
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/events/find.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/events/find.liquid
new file mode 100644
index 0000000..c3d264a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/events/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ if uuid == blank
+ return null
+ endif
+
+ function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid, page: null
+
+ return events.results.first.payload
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/events/search.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/events/search.liquid
new file mode 100644
index 0000000..2569598
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/events/search.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} uuids - List of UUID identifiers
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign uuids = uuids | default: null
+
+ graphql r = 'modules/core/events/search', limit: limit, page: page, uuids: uuids
+
+ assign events = r.activities
+
+ return events
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/get.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..e2453ef
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/get.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/headscripts/search', merge_to_object: null
+ return res
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/search.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..989f536
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/headscripts/search.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/hook/search.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..5b49f62
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/hook/search.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/module/exists.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..474665d
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/get.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..aa3524a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/search.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..96116a4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/find.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/find.liquid
new file mode 100644
index 0000000..b7cf078
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = 'modules/core/statuses/search', id: id, limit: 1, page: 1
+
+ return r.statuses.results.first
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/search.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/search.liquid
new file mode 100644
index 0000000..f4f79d8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/statuses/search.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} name - The name identifier
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign limit = limit | default: 20
+
+ graphql r = 'modules/core/statuses/search', limit: limit, page: page, id: id, name: name, reference_id: reference_id, requester_id: requester_id, reference_schema: reference_schema, timestamp: timestamp
+
+ return r.statuses
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/find.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/get.liquid b/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..e51e5de
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/date.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/date.liquid
new file mode 100644
index 0000000..7125e98
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/date.liquid
@@ -0,0 +1,78 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/each_element_length.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..85f5315
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/elements_included.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..6b58bde
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/elements_included.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/email.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/email.liquid
new file mode 100644
index 0000000..39c8029
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/email.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/equal.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/equal.liquid
new file mode 100644
index 0000000..6b367e4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/equal.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/exist_in_db.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..abc8a51
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/exist_in_db.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/hcaptcha.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..21289c9
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/hcaptcha.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/included.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/included.liquid
new file mode 100644
index 0000000..a432b8c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/included.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/is_url.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/is_url.liquid
new file mode 100644
index 0000000..8ffaa46
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/is_url.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} url - The URL to redirect to
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.not_url'
+ assign is_url = url | matches: '^https?:\/\/[\S]+'
+
+ if is_url != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
\ No newline at end of file
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/length.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/length.liquid
new file mode 100644
index 0000000..fba5e45
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/length.liquid
@@ -0,0 +1,44 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name, key: null
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/matches.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/matches.liquid
new file mode 100644
index 0000000..19a1c8a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/matches.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/not_null.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/not_null.liquid
new file mode 100644
index 0000000..810b5f8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/not_null.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/number.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/number.liquid
new file mode 100644
index 0000000..d39591f
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/number.liquid
@@ -0,0 +1,69 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/password_complexity.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..634daa6
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/password_complexity.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+ @param {string} field_name - The name of the field to validate
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ assign decoded_pw = object.password
+ assign minimum = minimum | default: 6
+ assign maximum = maximum | default: 256
+ assign field_name = field_name | default: 'password'
+
+ function complex_password = 'modules/core/queries/variable/find', name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: message_minimum, allow_blank: null, is: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/presence.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/presence.liquid
new file mode 100644
index 0000000..6526d2b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/presence.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/truthy.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/truthy.liquid
new file mode 100644
index 0000000..86b428e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/truthy.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/unique_elements.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..4bca1e8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/uniqueness.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..76a9948
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/uniqueness.liquid
@@ -0,0 +1,37 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/lib/validations/valid_object.liquid b/pos-module-oauth-facebook/modules/core/public/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..6693ec3
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/lib/validations/valid_object.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/schema/status.yml b/pos-module-oauth-facebook/modules/core/public/schema/status.yml
new file mode 100644
index 0000000..5a8a0de
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/schema/status.yml
@@ -0,0 +1,14 @@
+name: status
+properties:
+ - name: name
+ type: string
+ - name: timestamp
+ type: datetime
+ - name: reference_id
+ type: string
+ - name: reference_schema
+ type: string
+ - name: payload
+ type: string
+ - name: requester_id
+ type: string
diff --git a/pos-module-oauth-facebook/modules/core/public/translations/en/common.yml b/pos-module-oauth-facebook/modules/core/public/translations/en/common.yml
new file mode 100644
index 0000000..19ed613
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/translations/en/common.yml
@@ -0,0 +1,4 @@
+en:
+ common:
+ deleted: 'Deleted'
+ deleted_failed: 'Deleted failed'
diff --git a/pos-module-oauth-facebook/modules/core/public/translations/en/validation.yml b/pos-module-oauth-facebook/modules/core/public/translations/en/validation.yml
new file mode 100644
index 0000000..06a1a48
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/translations/en/validation.yml
@@ -0,0 +1,50 @@
+---
+en:
+ validation:
+ disallowed: is not valid
+ not_url: is not valid url
+ blank: cannot be blank
+ email: must be a valid email
+ equal: expected %{given} to equal %{expected}
+ equal_not_verbose: does not match
+ array:
+ not_included: '`%{value}` is not a valid value'
+ not_unique: elements must be unique
+ hcaptcha: Captcha has not been solved properly, please try again
+ length:
+ minimum: is too short (minimum is %{count} characters)
+ maximum: is too long (maximum is %{count} characters)
+ is: is the wrong length (should be %{count} characters)
+ blank: is blank
+ number:
+ invalid: '`%{value}` is not a number'
+ greater_than: must be greater than %{count}
+ greater_than_or_equal: must be greater than or equal to %{count}
+ less_than: must be less than %{count}
+ less_than_or_equal: must be less than or equal to %{count}
+ equal_to: must be equal to %{count}
+ gt: must be greater than %{count}
+ gte: must be greater than or equal to %{count}
+ lt: must be less than %{count}
+ lte: must be less than or equal to %{count}
+ eq: must be equal to %{count}
+ ne: must be not equal to %{count}
+ date:
+ can_be_past: The date cannot be in the past
+ can_be_future: The date cannot be in the future
+ lt: must be before %{date}
+ lte: must be before %{date}
+ gt: must be after %{date}
+ gte: must be after or equal to %{date}
+ too_short: has to be longer than %{value} characters
+ taken: already taken
+ not_uniq: not unique
+ matches: not valid format
+ not_truthy: not true
+ not_null: not null
+ password:
+ lowercase: must include at least one lower case
+ uppercase: must include at least one upper case
+ number: must include at least one number
+ invalid: invalid
+ not_exist: not exist
diff --git a/pos-module-oauth-facebook/modules/core/public/views/layouts/basic.liquid b/pos-module-oauth-facebook/modules/core/public/views/layouts/basic.liquid
new file mode 100644
index 0000000..6b57c72
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/layouts/basic.liquid
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/layouts/mailer.html.liquid b/pos-module-oauth-facebook/modules/core/public/views/layouts/mailer.html.liquid
new file mode 100644
index 0000000..510f6a1
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/layouts/mailer.html.liquid
@@ -0,0 +1,46 @@
+{% liquid
+ assign rtl_languages = 'ar,arc,dv,fa,ha,he,khw,ks,ku,ps,ur,yi' | split: ','
+ if rtl_languages contains context.language
+ assign direction = 'rtl'
+ else
+ assign direction = 'ltr'
+ endif
+ assign url = 'https://' | append: context.location.host
+%}
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
+
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/pages/_events/index.liquid b/pos-module-oauth-facebook/modules/core/public/views/pages/_events/index.liquid
new file mode 100644
index 0000000..e5c90c8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/pages/_events/index.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/core/basic
+slug: _events
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function events = 'modules/core/queries/events/search', limit: 50, page: null, uuids: null
+
+ render 'modules/core/events/list', events: events
+ endif
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/pages/_events/trigger.liquid b/pos-module-oauth-facebook/modules/core/public/views/pages/_events/trigger.liquid
new file mode 100644
index 0000000..85099b8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/pages/_events/trigger.liquid
@@ -0,0 +1,20 @@
+---
+layout: modules/core/basic
+slug: _events/:uuid/trigger
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function event = 'modules/core/queries/events/find', uuid: context.params.uuid
+
+ if context.params.trigger
+ function event = 'modules/core/commands/events/broadcast', object: event, deprecated_delay: null, deprecated_max_attempts: null
+ echo 'BROADCASTED'
+ else
+ assign name = 'consumers/' | append: event.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+ assign event.consumers = consumers
+ endif
+
+ render 'modules/core/events/show', event: event
+ endif
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/.gitkeep b/pos-module-oauth-facebook/modules/core/public/views/partials/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/events/event_card.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/events/event_card.liquid
new file mode 100644
index 0000000..fcee8e2
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/events/event_card.liquid
@@ -0,0 +1,56 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign event_slim = event | deep_clone
+ assign _ = event_slim | hash_delete_key: 'object'
+ assign _ = event_slim | hash_delete_key: 'actor'
+ assign _ = event_slim | hash_delete_key: 'target'
+ assign _ = event_slim | hash_delete_key: 'id'
+ assign _ = event_slim | hash_delete_key: 'uuid'
+ assign _ = event_slim | hash_delete_key: 'date'
+ assign _ = event_slim | hash_delete_key: 'valid'
+ assign _ = event_slim | hash_delete_key: 'errors'
+ assign _ = event_slim | hash_delete_key: 'attributed_to'
+ assign _ = event_slim | hash_delete_key: 'type'
+ assign consumers = event_slim | hash_delete_key: 'consumers'
+%}
+
+
+ Event: {{ event.type }} {{ event.object.name | replace: "app.statuses.", "" }}
+
+
+ Date: {{ event.date | l }}
+
+
+ Attributes:
+
+
{{ event_slim }}
+
+
+
+
+
+
+
UUID: {{ event.uuid }}
+ {% if consumers %}
+
+ Consumers:
+
+ {% for consumer in consumers %}
+ {{ consumer.path }}
+ {% endfor %}
+
+
+ {% endif %}
+
+ show |
+ broadcast |
+
+
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/events/list.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/events/list.liquid
new file mode 100644
index 0000000..d6c0c4a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/events/list.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} events - The events collection
+{% enddoc %}
+
+
Events
+ {{ events.results.size }} / {{ events.total_entries }}
+ {% for event in events.results %}
+ {% render 'modules/core/events/event_card', event: event.payload %}
+
+ {% else %}
+ no events found
+ {% endfor %}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/events/show.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/events/show.liquid
new file mode 100644
index 0000000..665a505
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/events/show.liquid
@@ -0,0 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+
Event
+
<< List
+{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/.keep b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send.liquid
new file mode 100644
index 0000000..f03248b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: lib/commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/build.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..43fbfa5
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..48cd149
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..dc2577b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/hooks/.keep b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/.keep b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/get.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..37efd30
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
@@ -0,0 +1,6 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ log 'Use queries/headscripts/get instead of lib/queries/headscripts/get', type: 'DEPRECATION'
+ function res = 'modules/core/lib/queries/headscripts/search', merge_to_object: false
+ return res
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..72607a4
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..f97ad06
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..9801f78
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/lib/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..adbdeda
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/lib/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..ae8f96c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..f6ba482
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/date.liquid
new file mode 100644
index 0000000..e4d6a7b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/date.liquid
@@ -0,0 +1,79 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..2c7f107
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..bd8035b
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/email.liquid
new file mode 100644
index 0000000..6699b19
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/email.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/equal.liquid
new file mode 100644
index 0000000..97284b8
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -0,0 +1,24 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..c86b2fc
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -0,0 +1,32 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..7693b5a
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/included.liquid
new file mode 100644
index 0000000..85b4d16
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/included.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/length.liquid
new file mode 100644
index 0000000..403a064
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/length.liquid
@@ -0,0 +1,49 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ if size == blank
+ assign message = message_blank | default: 'modules/core/validation.length.blank' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/matches.liquid
new file mode 100644
index 0000000..fb47b05
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/not_null.liquid
new file mode 100644
index 0000000..23d6bd0
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/number.liquid
new file mode 100644
index 0000000..6a11fe0
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/number.liquid
@@ -0,0 +1,70 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+ log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..04bb51c
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
+ assign decoded_pw = object.password
+
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/presence.liquid
new file mode 100644
index 0000000..06862bd
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/truthy.liquid
new file mode 100644
index 0000000..9b2a93e
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..f052483
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..66d62c7
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..690addf
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-facebook/modules/core/template-values.json b/pos-module-oauth-facebook/modules/core/template-values.json
new file mode 100644
index 0000000..d386e90
--- /dev/null
+++ b/pos-module-oauth-facebook/modules/core/template-values.json
@@ -0,0 +1,7 @@
+{
+ "name": "Pos Module Core",
+ "machine_name": "core",
+ "type": "module",
+ "version": "2.1.5",
+ "dependencies": {}
+}
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token.liquid
index 5d72c4f..ae8c170 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token.liquid
@@ -6,8 +6,7 @@
if object.valid
assign query = object | querify
- assign headers = "{}" | parse_json
- hash_assign headers["Accept"] = "application/json"
+ assign headers = { "Accept": "application/json" }
assign url = "https://graph.facebook.com/v22.0/oauth/access_token?" | append: query
graphql r = "modules/oauth_facebook/get_token", body: url, headers: headers
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/build.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/build.liquid
index ffe94d3..c762a1b 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/build.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/build.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {object} object - The object containing token request data
+ @param {string} location - The redirect URI location
+{% enddoc %}
{% parse_json object %}
{
"grant_type": "authorization_code",
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/check.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/check.liquid
index 4a32761..e19496b 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/check.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_token/check.liquid
@@ -1,14 +1,17 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
-assign c = '{ "errors": {}, "valid": true }' | parse_json
+assign c = { "errors": {}, "valid": true }
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'redirect_uri'
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'redirect_uri', key: null
-hash_assign object['valid'] = c.valid
-hash_assign object['errors'] = c.errors
+assign object.valid = c.valid
+assign object.errors = c.errors
return object
%}
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_user_info/check.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_user_info/check.liquid
index 9f6147d..dfda33e 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_user_info/check.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/commands/get_user_info/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
\ No newline at end of file
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_redirect_url.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_redirect_url.liquid
index d755306..d0b949d 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_redirect_url.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_redirect_url.liquid
@@ -1,11 +1,12 @@
-{% liquid
-assign data = "{}" | parse_json
-hash_assign data['scope'] = "email,public_profile"
-hash_assign data['client_id'] = provider.client_id
-hash_assign data["state"] = state
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+ @param {string} state - The OAuth state parameter
+{% enddoc %}
+{% liquid
+assign data = { "scope": "email,public_profile", "client_id": provider.client_id, "state": state }
assign location = "https://" | append: context.location.host | append: '/oauth/facebook/callback'
log location, type: "LOCATION"
-hash_assign data["redirect_uri"] = location
+assign data.redirect_uri = location
assign querified_data = data | querify
assign url = "https://www.facebook.com/v22.0/dialog/oauth?" | append: querified_data
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_user_info.liquid b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_user_info.liquid
index 5e066e0..929a2c0 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_user_info.liquid
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/public/lib/helpers/get_user_info.liquid
@@ -1,32 +1,30 @@
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+{% enddoc %}
{% liquid
# fetch token and get user data
-assign get_token_request = "{}" | parse_json
-hash_assign get_token_request["client_id"] = provider.client_id
-hash_assign get_token_request["client_secret"] = provider.secret_value
-hash_assign get_token_request["code"] = context.params.code
+assign get_token_request = { "client_id": provider.client_id, "client_secret": provider.secret_value, "code": context.params.code }
# get access token
function access_token = "modules/oauth_facebook/commands/get_token", data: get_token_request
assign access_token = access_token.access_token
-assign result = "{}" | parse_json
-hash_assign result["valid"] = false
+assign result = { "valid": false }
if access_token == null
return result
endif
# get user info
-assign request_data = "{}" | parse_json
-hash_assign request_data["access_token"] = access_token
+assign request_data = { "access_token": access_token }
function user_info = "modules/oauth_facebook/commands/get_user_info", data: request_data
-hash_assign result["first_name"] = user_info.first_name
-hash_assign result["last_name"] = user_info.last_name
-hash_assign result["sub"] = user_info.id
-hash_assign result["email"] = user_info.email
+assign result.first_name = user_info.first_name
+assign result.last_name = user_info.last_name
+assign result.sub = user_info.id
+assign result.email = user_info.email
if result.sub != null and result["email"] != null
- hash_assign result["valid"] = true
+ assign result.valid = true
endif
return result
diff --git a/pos-module-oauth-facebook/modules/oauth_facebook/template-values.json b/pos-module-oauth-facebook/modules/oauth_facebook/template-values.json
index a9f1c98..3824565 100644
--- a/pos-module-oauth-facebook/modules/oauth_facebook/template-values.json
+++ b/pos-module-oauth-facebook/modules/oauth_facebook/template-values.json
@@ -2,7 +2,7 @@
"name": "pos-module-oauth-facebook",
"machine_name": "oauth_facebook",
"type": "module",
- "version": "0.0.2",
+ "version": "0.0.3",
"dependencies": {
"core": "^2.0.0"
}
diff --git a/pos-module-oauth-github/modules/core/generators/command/index.js b/pos-module-oauth-github/modules/core/generators/command/index.js
new file mode 100644
index 0000000..29fb67e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/command/index.js
@@ -0,0 +1,46 @@
+import Generator from 'yeoman-generator';
+import path from 'path';
+import pluralize from 'pluralize';
+import fs from 'fs';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate basic command files with build and check phase';
+ this.argument('commandName', { type: String, required: true, description: 'name of the command' });
+ this.props = {
+ commandName: this.options.commandName,
+ actionName: this.options.commandName.split('/').pop(),
+ modelName: this.options.commandName.split('/')[0]
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create.liquid'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}.liquid`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create/'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}/`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./graphql/create.graphql'),
+ this.destinationPath(`app/graphql/${this.props.commandName}.graphql`),
+ this.props
+ )
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('Command generated');
+ }
+};
diff --git a/pos-module-oauth-github/modules/core/generators/command/templates/graphql/create.graphql b/pos-module-oauth-github/modules/core/generators/command/templates/graphql/create.graphql
new file mode 100644
index 0000000..0ffb1e5
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/command/templates/graphql/create.graphql
@@ -0,0 +1,20 @@
+mutation <%= actionName %>(
+ # some arguments
+ # $foo: String!
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ # { name: "foo" property: $foo }
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ # foo: (name: "foo")
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create.liquid b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create.liquid
new file mode 100644
index 0000000..6d7102e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= commandName %>/build', object: object
+ function object = 'commands/<%= commandName %>/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= commandName %>' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/build.liquid b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/build.liquid
new file mode 100644
index 0000000..1fc2591
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/build.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign data = {"id": object.id, "name": object.name}
+ return data
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/check.liquid b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/check.liquid
new file mode 100644
index 0000000..2c53a6c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/command/templates/lib/commands/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/index.js b/pos-module-oauth-github/modules/core/generators/crud/index.js
new file mode 100644
index 0000000..dd839bc
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/index.js
@@ -0,0 +1,116 @@
+import Generator from 'yeoman-generator';
+import pluralize from 'pluralize';
+import startCase from 'lodash.startcase';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate table definition and commands for CRUD with graphql files';
+ this.argument('modelName', { type: String, required: true, description: 'name of the table' });
+ this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: "[]" });
+ this.option('include-views', { type: Boolean, default: false, description: 'generate pages and partials', hide: 'no' });
+
+ const attributes = this.options.attributes.map((attr) => {
+ const values = attr.split(':');
+ return {
+ name: values[0],
+ nameHuman: startCase(values[0]),
+ type: values[1]
+ };
+ });
+ this.props = {
+ modelName: this.options.modelName,
+ modelNamePlural: pluralize(this.options.modelName),
+ attributes: attributes,
+ graphqlArgumentMap: {
+ string: "String",
+ text: "String",
+ integer: "Int",
+ boolean: "Boolean",
+ float: "Float",
+ date: "String",
+ datetime: "String",
+ array: "[String]"
+ },
+ graphqlArgumentValueMap: {
+ string: "value",
+ text: "value",
+ integer: "value_int",
+ boolean: "value_boolean",
+ float: "value_float",
+ date: "value",
+ datetime: "value",
+ array: "value_array"
+ },
+ graphqlPropertyMap: {
+ string: "property",
+ text: "property",
+ integer: "property_int",
+ boolean: "property_boolean",
+ float: "property_float",
+ date: "property",
+ datetime: "property",
+ array: "property_array"
+ }
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./translations/model.yml'),
+ this.destinationPath(`app/translations/en/${this.props.modelNamePlural}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./schema/model.yml'),
+ this.destinationPath(`app/schema/${this.props.modelName}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./graphql/*.graphql'),
+ this.destinationPath(`app/graphql/${this.props.modelNamePlural}/`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/queries/model'),
+ this.destinationPath(`app/lib/queries/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/model'),
+ this.destinationPath(`app/lib/commands/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./config.yml'),
+ this.destinationPath(`app/config.yml`),
+ this.props
+ )
+ if(this.options['include-views']){
+ this.fs.copyTpl(
+ this.templatePath('./views/pages/model'),
+ this.destinationPath(`app/views/pages/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/model'),
+ this.destinationPath(`app/views/partials/theme/simple/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/field_error.liquid'),
+ this.destinationPath(`app/views/partials/theme/simple/field_error.liquid`),
+ this.props
+ )
+ }
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('CRUD generated');
+ }
+};
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/config.yml b/pos-module-oauth-github/modules/core/generators/crud/templates/config.yml
new file mode 100644
index 0000000..45cd4ce
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/config.yml
@@ -0,0 +1,16 @@
+---
+escape_output_instead_of_sanitize: true
+graphql_argument_type_mismatch_mode: 'error'
+liquid_add_old_variables: false
+liquid_check_mode: 'error'
+liquid_raise_mode: true
+require_table_for_record_delete_mutation: true
+safe_translate: true
+skip_elasticsearch: false
+slug_exact_match: true
+websockets_require_csrf_token: true
+maintenance:
+ enabled: false
+ password_constant: 'MAINTENANCE_PASSWORD'
+ partial: 'maintenance'
+---
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/create.graphql b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/create.graphql
new file mode 100644
index 0000000..67905af
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/create.graphql
@@ -0,0 +1,25 @@
+mutation create_<%= modelName %>(
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>!
+<% }); -%>
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/delete.graphql b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/delete.graphql
new file mode 100644
index 0000000..c77948f
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/delete.graphql
@@ -0,0 +1,6 @@
+mutation delete($id: ID!) {
+ record: record_delete(
+ table: "<%= modelName %>"
+ id: $id
+ ){ id }
+}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/search.graphql b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/search.graphql
new file mode 100644
index 0000000..a22b2fd
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/search.graphql
@@ -0,0 +1,39 @@
+query search(
+ $id: ID
+ $limit: Int = 20
+ $page: Int = 1
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: String
+<% }); -%>
+) {
+ <%= modelNamePlural %>: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "<%= modelName %>" }
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" value: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ sort: [
+ { created_at: { order: DESC }}
+ ]
+ ){
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/update.graphql b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/update.graphql
new file mode 100644
index 0000000..73e4556
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/graphql/update.graphql
@@ -0,0 +1,27 @@
+mutation update_<%= modelName %>(
+ $id: ID!
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>
+<% }); -%>
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ updated_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create.liquid
new file mode 100644
index 0000000..26b0a03
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/create' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
new file mode 100644
index 0000000..caf4d8d
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
new file mode 100644
index 0000000..1ce0a60
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
new file mode 100644
index 0000000..4fada40
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update.liquid
new file mode 100644
index 0000000..29a229c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/update/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/update' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
new file mode 100644
index 0000000..cffe564
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
@@ -0,0 +1,13 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/find.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/find.liquid
new file mode 100644
index 0000000..7f84e12
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/find.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = '<%= modelNamePlural %>/search', id: id, limit: 1
+
+ return r.<%= modelNamePlural %>.results.first
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/search.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/search.liquid
new file mode 100644
index 0000000..369ec37
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/lib/queries/model/search.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ graphql r = '<%= modelNamePlural %>/search', limit: limit, page: 1
+ return r.<%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/schema/model.yml b/pos-module-oauth-github/modules/core/generators/crud/templates/schema/model.yml
new file mode 100644
index 0000000..380c67b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/schema/model.yml
@@ -0,0 +1,6 @@
+name: <%= modelName %>
+properties:
+<% attributes.forEach((attr) => { -%>
+ - name: <%= attr.name %>
+ type: <%= attr.type %>
+<% }); -%>
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/translations/model.yml b/pos-module-oauth-github/modules/core/generators/crud/templates/translations/model.yml
new file mode 100644
index 0000000..879b076
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/translations/model.yml
@@ -0,0 +1,15 @@
+en:
+ app:
+ <%= modelNamePlural %>:
+ new:
+ new: New <%= modelName %>
+ edit:
+ edit: Edit <%= modelName %>
+ list:
+ add: Add <%= modelName %>
+ empty_state: You haven't added any <%= modelNamePlural %> yet.
Create your first one now!
+ edit: Edit
+ attr:
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= attr.nameHuman %>
+ <% }); -%>
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/create.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/create.liquid
new file mode 100644
index 0000000..cf27c95
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/create.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: post
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ endif
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/delete.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/delete.liquid
new file mode 100644
index 0000000..bb26a02
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/delete.liquid
@@ -0,0 +1,16 @@
+---
+slug: <%= modelNamePlural %>
+method: delete
+---
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+ function object = 'commands/<%= modelNamePlural %>/delete', object: object
+
+ # platformos-check-disable ConvertIncludeToRender
+ if object.valid
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', notice: 'modules/core/common.deleted'
+ else
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', error: 'modules/core/common.delete_failed'
+ endif
+ # platformos-check-enable ConvertIncludeToRender
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/edit.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/edit.liquid
new file mode 100644
index 0000000..b098d38
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/edit.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/index.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/index.liquid
new file mode 100644
index 0000000..75290a7
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/index.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function <%= modelNamePlural %> = 'queries/<%= modelNamePlural %>/search', limit: 100
+
+ render 'theme/simple/<%= modelNamePlural %>/index', <%= modelNamePlural %>: <%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/new.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/new.liquid
new file mode 100644
index 0000000..43c1b24
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/new.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign object = {}
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ %}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/show.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/show.liquid
new file mode 100644
index 0000000..c9672cc
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/show.liquid
@@ -0,0 +1,13 @@
+---
+slug: <%= modelNamePlural %>/:id
+---
+{% liquid
+
+ assign <%= modelName %>_id = context.params.id | split: '-' | last
+ function <%= modelName %> = 'queries/<%= modelNamePlural %>/find', id: <%= modelName %>_id
+ if <%= modelName %>.id
+ render 'theme/simple/<%= modelNamePlural %>/show', <%= modelName %>: <%= modelName %>
+ else
+ response_status 404
+ endif
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/update.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/update.liquid
new file mode 100644
index 0000000..06644bd
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/pages/model/update.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: put
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+ endif
+%}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
new file mode 100644
index 0000000..16d306b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
@@ -0,0 +1,5 @@
+{% if errors %}
+
+ {{ errors | join: ', ' }}
+
+{% endif %}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
new file mode 100644
index 0000000..6bd91f2
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
@@ -0,0 +1,5 @@
+
+
{{ 'app.<%= modelNamePlural %>.edit.edit' | t }} {{ object.name }}
+
+
+{% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
new file mode 100644
index 0000000..5abe317
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
@@ -0,0 +1,9 @@
+
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
new file mode 100644
index 0000000..e12d1ee
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
@@ -0,0 +1,27 @@
+{% liquid
+ if object.id
+ assign method = 'put'
+ else
+ assign method = 'post'
+ endif
+%}
+
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
new file mode 100644
index 0000000..352f7a0
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
@@ -0,0 +1,49 @@
+
+
+
+ {% if <%= modelNamePlural %>.results.size > 0 %}
+
+
+
+<% attributes.forEach((attr) => { -%>
+
+ {{ "app.<%= modelNamePlural %>.attr.<%= attr.name %>" | t }}
+
+<% }); -%>
+
+
+
+ {% for <%= modelName %> in <%= modelNamePlural %>.results %}
+
+<% attributes.forEach((attr) => { -%>
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+<% }); -%>
+
+
+ {{ 'app.<%= modelNamePlural %>.list.edit' | t }}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ {% render 'theme/simple/<%= modelNamePlural %>/empty_state' %}
+ {% endif %}
+
+
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
new file mode 100644
index 0000000..e15a8d4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
@@ -0,0 +1,4 @@
+
+
{{ 'app.<%= modelNamePlural %>.new.new' | t }}
+ {% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
+
diff --git a/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
new file mode 100644
index 0000000..483dd89
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
@@ -0,0 +1,15 @@
+
+
+ <%= modelName %> - {{ <%= modelName %>.id }}
+
+
+ <% attributes.forEach((attr) => { -%>
+
+ {{ 'app.<%= modelNamePlural %>.attr.<%= attr.name %>' | t }}
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+ <% }); -%>
+
diff --git a/pos-module-oauth-github/modules/core/package-lock.json b/pos-module-oauth-github/modules/core/package-lock.json
new file mode 100644
index 0000000..655962c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/package-lock.json
@@ -0,0 +1,3225 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "license": "MIT",
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "node_modules/@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "4.2.10"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ }
+ },
+ "node_modules/@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=16.18.26",
+ "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0",
+ "mem-fs": "^3.0.0 || ^4.0.0-beta.1",
+ "mem-fs-editor": "^10.0.2 || >=10.0.2"
+ },
+ "peerDependenciesMeta": {
+ "@yeoman/adapter": {
+ "optional": true
+ },
+ "mem-fs": {
+ "optional": true
+ },
+ "mem-fs-editor": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
+ "node_modules/auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ },
+ "bin": {
+ "auto-changelog": "src/index.js"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "version-range": "^4.15.0"
+ },
+ "engines": {
+ "ecmascript": ">= es5",
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "license": "ISC"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "license": "MIT"
+ },
+ "node_modules/isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "license": "MIT",
+ "dependencies": {
+ "package-json": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ },
+ "acceptDependencies": {
+ "isbinaryfile": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "mem-fs": "^4.0.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "license": "MIT",
+ "dependencies": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true,
+ "bin": {
+ "parse-github-url": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "license": "ISC"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/npm-conf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "license": "ISC"
+ },
+ "node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
+ "dependencies": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18.18.5",
+ "@yeoman/types": "^1.1.1",
+ "mem-fs": "^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
+ },
+ "@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "requires": {
+ "debug": "^4.1.1"
+ }
+ },
+ "@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
+ },
+ "@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "peer": true,
+ "requires": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "requires": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "requires": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "requires": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "requires": {
+ "@octokit/types": "^14.0.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "requires": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "requires": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="
+ },
+ "@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "requires": {
+ "graceful-fs": "4.2.10"
+ }
+ },
+ "@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "requires": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ }
+ },
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
+ },
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
+ },
+ "@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
+ },
+ "@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "peer": true,
+ "requires": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
+ },
+ "@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "requires": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA=="
+ },
+ "@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "peer": true,
+ "requires": {}
+ },
+ "array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="
+ },
+ "array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
+ },
+ "async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="
+ },
+ "auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "requires": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ }
+ },
+ "b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "requires": {}
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "requires": {}
+ },
+ "before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+ },
+ "binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+ },
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "requires": {
+ "version-range": "^4.15.0"
+ }
+ },
+ "ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "requires": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
+ },
+ "fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ }
+ },
+ "fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="
+ },
+ "first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ=="
+ },
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ },
+ "github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "requires": {
+ "@octokit/rest": "^21.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "requires": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "requires": {
+ "lru-cache": "^10.0.1"
+ }
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
+ },
+ "ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="
+ },
+ "index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+ },
+ "isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "requires": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="
+ },
+ "latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "requires": {
+ "package-json": "^10.0.0"
+ }
+ },
+ "lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "peer": true,
+ "requires": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ }
+ },
+ "mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "peer": true,
+ "requires": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "requires": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "requires": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "requires": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ }
+ },
+ "parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "requires": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ }
+ },
+ "read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "dependencies": {
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "requires": {
+ "@pnpm/npm-conf": "^3.0.2"
+ }
+ },
+ "registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "requires": {
+ "rc": "1.2.8"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
+ },
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
+ "simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "requires": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ }
+ },
+ "slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
+ },
+ "sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "requires": {
+ "is-plain-obj": "^4.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="
+ },
+ "streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "requires": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "requires": {
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "requires": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ },
+ "teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "requires": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "requires": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
+ },
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
+ },
+ "universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg=="
+ },
+ "vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "requires": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ }
+ },
+ "vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "requires": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "peer": true,
+ "requires": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ }
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/package.json b/pos-module-oauth-github/modules/core/package.json
new file mode 100644
index 0000000..49515a0
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "description": "Module description",
+ "type": "module",
+ "scripts": {
+ "version": "(cd ../../ && pos-cli modules version core -p) && git add template-values.json && auto-changelog -p && git add CHANGELOG.md"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Platform-OS/pos-module-core.git"
+ },
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Platform-OS/pos-module-core/issues"
+ },
+ "homepage": "https://github.com/Platform-OS/pos-module-core#readme",
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ },
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "auto-changelog": {
+ "template": "changelog-template.hbs",
+ "unreleased": true,
+ "commitLimit": false
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/api_calls/generic.liquid b/pos-module-oauth-github/modules/core/public/api_calls/generic.liquid
new file mode 100644
index 0000000..0a3289b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/api_calls/generic.liquid
@@ -0,0 +1,6 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{{ data.payload }}
diff --git a/pos-module-oauth-github/modules/core/public/api_calls/generic_x_form_encoded.liquid b/pos-module-oauth-github/modules/core/public/api_calls/generic_x_form_encoded.liquid
new file mode 100644
index 0000000..4085222
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/api_calls/generic_x_form_encoded.liquid
@@ -0,0 +1,10 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{% liquid
+ function url = 'modules/core/helpers/hash_to_x_form_encoded', payload: data.payload
+ print url
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/emails/.keep b/pos-module-oauth-github/modules/core/public/emails/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/emails/generic.liquid b/pos-module-oauth-github/modules/core/public/emails/generic.liquid
new file mode 100644
index 0000000..240ce94
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/emails/generic.liquid
@@ -0,0 +1,13 @@
+---
+from: "{{ data.from }}"
+layout: "{{ data.layout }}"
+to: "{{ data.to }}"
+cc: "{{ data.cc }}"
+bcc: "{{ data.bcc }}"
+subject: "{{ data.subject }}"
+---
+{% liquid
+ # platformos-check-disable
+ include data.partial, data: data.data
+ # platformos-check-enable
+%}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/.keep b/pos-module-oauth-github/modules/core/public/graphql/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/graphql/api_calls/send.graphql b/pos-module-oauth-github/modules/core/public/graphql/api_calls/send.graphql
new file mode 100644
index 0000000..b26d03f
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/api_calls/send.graphql
@@ -0,0 +1,12 @@
+mutation ($template: String!, $data: HashObject!, $options: ApiCallSendOptions) {
+ api_call: api_call_send(
+ data: $data
+ template: { name: $template }
+ options: $options
+ ) {
+ response{ status body }
+ errors {
+ message
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/email/send.graphql b/pos-module-oauth-github/modules/core/public/graphql/email/send.graphql
new file mode 100644
index 0000000..2f9fc39
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/email/send.graphql
@@ -0,0 +1,9 @@
+mutation ($data: HashObject!, $template: String!){
+ email_send(
+ template: { name: $template }
+ data: $data
+ ){
+ is_scheduled_to_send
+ errors { message }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/events/consumers.graphql b/pos-module-oauth-github/modules/core/public/graphql/events/consumers.graphql
new file mode 100644
index 0000000..b13d23b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/events/consumers.graphql
@@ -0,0 +1,15 @@
+query consumers($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { contains: $name }
+ }
+ sort: {
+ path: { order: ASC }
+ }
+ ) {
+ results {
+ path
+ metadata
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/events/create.graphql b/pos-module-oauth-github/modules/core/public/graphql/events/create.graphql
new file mode 100644
index 0000000..77bc1d9
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/events/create.graphql
@@ -0,0 +1,7 @@
+mutation create_event($payload: ActivityStreamsPayload!) {
+ activity_create(
+ payload: $payload
+ ) {
+ payload
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/events/events_checks.graphql b/pos-module-oauth-github/modules/core/public/graphql/events/events_checks.graphql
new file mode 100644
index 0000000..c326d87
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/events/events_checks.graphql
@@ -0,0 +1,11 @@
+query events_checks($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { ends_with: $name }
+ }
+ ) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/events/search.graphql b/pos-module-oauth-github/modules/core/public/graphql/events/search.graphql
new file mode 100644
index 0000000..4e78dd2
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/events/search.graphql
@@ -0,0 +1,14 @@
+query ac($limit: Int = 100 $page: Int = 1 $uuids: [String!]) {
+ activities: activities(
+ per_page: $limit,
+ page: $page
+ uuids: $uuids
+ sort: { created_at: { order: DESC } }
+ ){
+ total_entries
+ total_pages
+ results {
+ payload
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/hook/search.graphql b/pos-module-oauth-github/modules/core/public/graphql/hook/search.graphql
new file mode 100644
index 0000000..37e31e2
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/hook/search.graphql
@@ -0,0 +1,7 @@
+query ($hook: String) {
+ admin_liquid_partials(filter: { path: { ends_with: $hook } }) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/records/count.graphql b/pos-module-oauth-github/modules/core/public/graphql/records/count.graphql
new file mode 100644
index 0000000..9a21894
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/records/count.graphql
@@ -0,0 +1,26 @@
+query records_count(
+ $property_name: String!
+ $property_value: String!
+ $scope_name: String!
+ $scope_value: String
+ $table: String!
+ $not_ids: [ID!]
+ $ids: [ID!]
+ $exclude_name: String!
+ $exclude_value: String
+) {
+ records(
+ per_page: 1
+ filter: {
+ id: { not_value_in: $not_ids, value_in: $ids }
+ table: { value: $table }
+ properties: [
+ { name: $property_name, value: $property_value }
+ { name: $scope_name, value: $scope_value }
+ { name: $exclude_name, not_value: $exclude_value }
+ ]
+ }
+ ) {
+ total_entries
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/session/delete.graphql b/pos-module-oauth-github/modules/core/public/graphql/session/delete.graphql
new file mode 100644
index 0000000..c83de59
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/session/delete.graphql
@@ -0,0 +1,5 @@
+mutation ($name: String!){
+ session_delete_field(
+ name: $name
+ )
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/session/set.graphql b/pos-module-oauth-github/modules/core/public/graphql/session/set.graphql
new file mode 100644
index 0000000..9069f25
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/session/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: Any!){
+ session_create_field(
+ name: $name
+ value: $value
+ )
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/statuses/create.graphql b/pos-module-oauth-github/modules/core/public/graphql/statuses/create.graphql
new file mode 100644
index 0000000..7274afc
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/statuses/create.graphql
@@ -0,0 +1,34 @@
+mutation create_status(
+ $name: String!
+ $timestamp: String!
+ $reference_id: String!
+ $reference_schema: String
+ $payload: String
+ $requester_id: String!
+) {
+ record: record_create(
+ record: {
+ table: "modules/core/status"
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "payload", value: $payload }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ ) {
+ id
+ created_at
+ deleted_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/statuses/delete.graphql b/pos-module-oauth-github/modules/core/public/graphql/statuses/delete.graphql
new file mode 100644
index 0000000..fb333ab
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/statuses/delete.graphql
@@ -0,0 +1,5 @@
+mutation delete_status($id: ID!) {
+ record_delete(table: "modules/core/status", id: $id) {
+ id
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/statuses/search.graphql b/pos-module-oauth-github/modules/core/public/graphql/statuses/search.graphql
new file mode 100644
index 0000000..8beffdc
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/statuses/search.graphql
@@ -0,0 +1,45 @@
+query search(
+ $id: ID
+ $limit: Int!
+ $page: Int!
+ $name: String
+ $timestamp: String
+ $reference_id: String
+ $reference_schema: String
+ $requester_id: String
+) {
+ statuses: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "modules/core/status" }
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ sort: [{ created_at: { order: DESC } }]
+ ) {
+ total_entries
+ has_next_page
+ has_previous_page
+ current_page
+
+ results {
+ id
+ created_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/graphql/variable/set.graphql b/pos-module-oauth-github/modules/core/public/graphql/variable/set.graphql
new file mode 100644
index 0000000..3c7b0d9
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/graphql/variable/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: String!) {
+ variable: constant_set(name: $name, value: $value) {
+ name
+ value
+ }
+}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/.keep b/pos-module-oauth-github/modules/core/public/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/email/send.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/email/send.liquid
new file mode 100644
index 0000000..1fc5273
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/email/send.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/email/send/build.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/email/send/check.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/broadcast.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/broadcast.liquid
new file mode 100644
index 0000000..ec2b6bd
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/broadcast.liquid
@@ -0,0 +1,29 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ if object.type == blank
+ log 'ERROR: events broadcast type blank'
+ return null
+ endif
+ assign priorities = 'low,default,high' | split: ','
+
+ assign name = 'consumers/' | append: object.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+
+ assign object.consumers = consumers
+ for consumer in consumers
+ assign priority = 'default'
+ if priorities contains consumer.metadata.priority
+ assign priority = consumer.metadata.priority
+ endif
+ assign max_attempts = consumer.metadata.max_attempts | default: deprecated_max_attempts | default: 9
+ assign delay = consumer.metadata.delay | default: deprecated_delay | default: 0
+
+ background _id = consumer.path, event: object, priority: priority, delay: delay, max_attempts: max_attempts
+ endfor
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/create.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/create.liquid
new file mode 100644
index 0000000..c32c970
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/create.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ function event = 'modules/core/commands/events/create/build', type: type, object: object
+ function event = 'modules/core/commands/events/create/check', object: event, type: type
+ if event.valid
+ function event = 'modules/core/commands/events/create/execute', object: event
+ if event.valid
+ assign source_name = 'modules/core/commands/events/create:' | append: type
+ background _job_id = 'modules/core/commands/events/broadcast', object: event, deprecated_max_attempts: deprecated_max_attempts, deprecated_delay: deprecated_delay, source_name: source_name, priority: 'high'
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+
+ return event
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/create/build.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/build.liquid
new file mode 100644
index 0000000..32e10ed
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/build.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign now = 'now' | to_time
+ assign data = object
+ assign data.type = type
+ assign data.date = now
+
+ return data
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/create/check.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/check.liquid
new file mode 100644
index 0000000..a11a644
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/check.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date', key: null
+
+ assign name = 'events/' | append: object.type
+ graphql event_check_partials = 'modules/core/events/events_checks', name: name | dig: "admin_liquid_partials", "results"
+ for partial in event_check_partials
+ assign is_event_definition = partial.path | matches: '^(modules/[^/]+/events/[^/]++|events/[^/]+)$'
+ if is_event_definition
+ assign event_check_partial = partial
+ break
+ endif
+ endfor
+
+ if event_check_partial
+ function event_result = event_check_partial.path, event: object
+ if event_result.valid != true
+ assign c.errors.object = event_result.errors
+ assign c.valid = false
+ endif
+ else
+ assign message = 'There is no such event: ' | append: object.type | append: '. Please add event check in events/' | append: object.type
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message, key: null
+ endif
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+ return object
+ %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/create/execute.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/execute.liquid
new file mode 100644
index 0000000..d94fff4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/create/execute.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ graphql r = 'modules/core/events/create', payload: object
+
+ assign object = r.activity_create.payload
+ assign object.valid = true
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/events/publish.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/events/publish.liquid
new file mode 100644
index 0000000..586ad27
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/events/publish.liquid
@@ -0,0 +1,27 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+{% enddoc %}
+{% liquid
+ if delay > 0
+ log 'use metadata.delay in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+ if max_attempts
+ log 'use metadata.max_attempts in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+
+ unless type
+ log 'type is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+ unless object
+ log 'object is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+
+ function event = "modules/core/commands/events/create", type: type, object: object, deprecated_max_attempts: max_attempts, deprecated_delay: delay
+
+ return event
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/execute.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/execute.liquid
new file mode 100644
index 0000000..e0510a4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/execute.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} mutation_name - The GraphQL mutation name
+ @param {object} object - The object to process
+ @param {string} selection - The GraphQL result selection key
+{% enddoc %}
+{% liquid
+ assign selection = selection | default: 'record'
+
+ graphql r = mutation_name, args: object
+ if r.errors
+ log r, type: "ERROR: modules/core/commands/execute"
+ endif
+
+ assign object = r[selection]
+ assign object.valid = true
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/hook/alter.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..19f42fb
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/hook/alter.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/hook/fire.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..0b35c38
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/session/clear.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/session/clear.liquid
new file mode 100644
index 0000000..b823fa5
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/session/clear.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ graphql _ = 'modules/core/session/delete', name: key
+ return true
+ endif
+ return false
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/session/get.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/session/get.liquid
new file mode 100644
index 0000000..02b8240
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/session/get.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {boolean} clear - If true, clear the session value after reading
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ assign value = context.session[key] | parse_json
+ if clear
+ graphql _ = 'modules/core/session/delete', name: key
+ endif
+
+ return value
+ endif
+ return null
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/session/set.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/session/set.liquid
new file mode 100644
index 0000000..3441120
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/session/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | json
+ graphql _ = 'modules/core/session/set', name: key, value: value
+ return true
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create.liquid
new file mode 100644
index 0000000..dc5f46d
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create.liquid
@@ -0,0 +1,25 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/create/build', name: name, timestamp: timestamp, reference_id: reference_id, reference_schema: reference_schema, payload: payload, requester_id: requester_id
+ function object = 'modules/core/commands/statuses/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object, selection: null
+ if object.valid
+ function _ = 'modules/core/commands/events/publish', type: 'status_created', object: object, delay: delay, max_attempts: max_attempts
+ endif
+ else
+ log object, 'showme STATUS-INVALID'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/build.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/build.liquid
new file mode 100644
index 0000000..b46956a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/build.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% parse_json object %}
+ {
+ "name": {{ name | json }},
+ "timestamp": {{ timestamp | default: 'now' | to_time | json }},
+ "reference_id": {{ reference_id | json }},
+ "reference_schema": {{ reference_schema | json }},
+ "payload": {{ payload | json }},
+ "requester_id": {{ requester_id | json }}
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/check.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/check.liquid
new file mode 100644
index 0000000..61a2d21
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/create/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete.liquid
new file mode 100644
index 0000000..5c79d78
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/delete/build', id: id
+ function object = 'modules/core/commands/statuses/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/delete', selection: 'record_delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/build.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/build.liquid
new file mode 100644
index 0000000..29c1322
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/build.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ assign object = {"id": id}
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/check.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/check.liquid
new file mode 100644
index 0000000..737a3fd
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/statuses/delete/check.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/commands/variable/set.liquid b/pos-module-oauth-github/modules/core/public/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..cdbc3b8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/commands/variable/set.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/events/status_created.liquid b/pos-module-oauth-github/modules/core/public/lib/events/status_created.liquid
new file mode 100644
index 0000000..02541f7
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/events/status_created.liquid
@@ -0,0 +1,21 @@
+---
+metadata:
+ event:
+ name
+ reference_id
+ reference_schema
+ requester_id
+ payload
+---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id', key: null
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/authenticity_token.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/authenticity_token.liquid
new file mode 100644
index 0000000..6262ed4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/authenticity_token.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} authenticity_token - The authenticity token from the form
+ @param {string} token - The authenticity token value
+{% enddoc %}
+{% assign token = token | default: authenticity_token | default: context.authenticity_token %}
+{% unless token %}
+
Liquid Error AuthenticityTokenNotFound
+{% endunless %}
+
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/flash/publish.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/flash/publish.liquid
new file mode 100644
index 0000000..cd5847d
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/flash/publish.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+{% enddoc %}
+{% liquid
+ if error and error contains 'app.'
+ assign error = error | t
+ endif
+
+ if notice and notice contains 'app.'
+ assign notice = notice | t
+ endif
+
+ if info and info contains 'app.'
+ assign info = info | t
+ endif
+%}
+
+{% parse_json flash %}
+ {
+ "error": {{ error | json }},
+ "notice": {{ notice | json }},
+ "info": {{ info | json }},
+ "from": {{ context.location.pathname | json }},
+ "now": {{ force_clear | default: false }}
+ }
+{% endparse_json %}
+
+{% liquid
+ assign sflash = flash | json
+ session sflash = sflash
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
new file mode 100644
index 0000000..05d1820
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {object} payload - The payload data
+{% enddoc %}
+{% liquid
+ assign parameters = '' | split: ','
+ for pair in payload
+ assign component = pair[0] | append: '={' | append: pair[0] | append: '}'
+ assign parameters << component
+ endfor
+ if parameters.size > 0
+ assign x_form_encoded = parameters | join: '&' | expand_url_template: payload
+ else
+ assign x_form_encoded = ''
+ endif
+
+ return x_form_encoded
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/log_time.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/log_time.liquid
new file mode 100644
index 0000000..447397a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/log_time.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {string} _start - The start time for measuring elapsed time
+ @param {string} type - The type identifier
+ @param {string} env - The environment name for logging
+{% enddoc %}
+{% liquid
+ assign _stop = 'now' | to_time
+ assign _diff = _start | time_diff: _stop
+ if env
+ log _diff, type: type, env: env
+ else
+ log _diff, type: type
+ endif
+
+ return true
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/redirect_to.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/redirect_to.liquid
new file mode 100644
index 0000000..8f14d81
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/redirect_to.liquid
@@ -0,0 +1,50 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {object} object - The object to process
+ @param {string} default - The default value
+ @param {string} format - The response format
+ @param {string} url - The URL to redirect to
+{% enddoc %}
+{% liquid
+ if url == blank and context.session.return_to != blank
+ assign url = context.session.return_to
+ session return_to = null
+ endif
+
+ if context.params.return_to != blank or context.params.redirect_to != blank and url == blank
+ assign url = context.params.return_to | default: context.params.redirect_to | url_decode
+ assign not_start_with_slash = url | matches: '^(?!\/)(.+)'
+
+ # for security reasons, we do not allow redirecting to external URLs based on unsafe user input
+ assign wrong_url = url | matches: '^\/\/'
+ if not_start_with_slash or wrong_url
+ assign url = '/'
+ endif
+ else
+ assign default = default | default: '/'
+ assign url = url | default: default
+ endif
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info, force_clear: null
+ # platformos-check-enable DeprecatedTag
+
+ if format == 'json'
+ assign response_json = {"type": "redirect", "url": url}
+ if object.valid
+ echo response_json
+ else
+ response_status 422
+ assign res = { "errors": response_json.errors }
+
+ echo res
+ endif
+
+ else
+ redirect_to url
+ endif
+
+ break
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/register_error.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_all.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_all.liquid
new file mode 100644
index 0000000..7ed01d5
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_all.liquid
@@ -0,0 +1,18 @@
+{% comment %}
+ we need the to_json | parse_json hack because time_zones.all is an array of TimeZoneDrop (not an object)
+ this prevents us from using array filters or pass the timezone as reference (return it from a function, etc)
+ should be fixed on the platform level
+{% endcomment %}
+{% comment %}
+Returns an array of timezone objects in the following format:
+{
+ "formatted_name":"(GMT-12:00) International Date Line West",
+ "formatted_offset":"-12:00",
+ "name":"International Date Line West",
+ "utc_offset":-43200,
+ "abbreviation":"-12",
+ "friendly_name_with_region":"Etc - GMT+12",
+ "friendly_name_without_region":"GMT+12"
+}
+{% endcomment %}
+{% return context.globals.time_zones.all | parse_json %}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_name.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_name.liquid
new file mode 100644
index 0000000..20f429d
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_name.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: name: name
+
+ return timezone
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_offset.liquid b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
new file mode 100644
index 0000000..478d3ae
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {number} offset
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: formatted_offset: offset
+
+ return timezone
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/hooks/.keep b/pos-module-oauth-github/modules/core/public/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/.keep b/pos-module-oauth-github/modules/core/public/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/constants/find.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/constants/find.liquid
new file mode 100644
index 0000000..84fe8d8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/constants/find.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% if context.constants %}
+ {% assign value = context.constants[name] %}
+{% else %}
+ {% graphql r, name: name %}
+ query get_constant($name: String!) {
+ constant(filter: { name: $name }) {
+ name
+ value
+ }
+ }
+ {% endgraphql %}
+ {% assign value = r.constant.value %}
+{% endif %}
+
+{% liquid
+ case type
+ when "boolean"
+ if value == "true"
+ return true
+ else
+ return false
+ endif
+ when "integer"
+ assign value = value | plus: 0
+ return value
+ when "array"
+ assign value = value | split: ','
+ return value
+ when "time"
+ return value | to_time
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/events/find.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/events/find.liquid
new file mode 100644
index 0000000..c3d264a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/events/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ if uuid == blank
+ return null
+ endif
+
+ function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid, page: null
+
+ return events.results.first.payload
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/events/search.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/events/search.liquid
new file mode 100644
index 0000000..2569598
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/events/search.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} uuids - List of UUID identifiers
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign uuids = uuids | default: null
+
+ graphql r = 'modules/core/events/search', limit: limit, page: page, uuids: uuids
+
+ assign events = r.activities
+
+ return events
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/get.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..e2453ef
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/get.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/headscripts/search', merge_to_object: null
+ return res
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/search.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..989f536
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/headscripts/search.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/hook/search.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..5b49f62
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/hook/search.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/module/exists.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..474665d
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/registry/get.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..aa3524a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/registry/search.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..96116a4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/statuses/find.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/statuses/find.liquid
new file mode 100644
index 0000000..b7cf078
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/statuses/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = 'modules/core/statuses/search', id: id, limit: 1, page: 1
+
+ return r.statuses.results.first
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/statuses/search.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/statuses/search.liquid
new file mode 100644
index 0000000..f4f79d8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/statuses/search.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} name - The name identifier
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign limit = limit | default: 20
+
+ graphql r = 'modules/core/statuses/search', limit: limit, page: page, id: id, name: name, reference_id: reference_id, requester_id: requester_id, reference_schema: reference_schema, timestamp: timestamp
+
+ return r.statuses
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/variable/find.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/queries/variable/get.liquid b/pos-module-oauth-github/modules/core/public/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..e51e5de
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/date.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/date.liquid
new file mode 100644
index 0000000..7125e98
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/date.liquid
@@ -0,0 +1,78 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/each_element_length.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..85f5315
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/elements_included.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..6b58bde
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/elements_included.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/email.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/email.liquid
new file mode 100644
index 0000000..39c8029
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/email.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/equal.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/equal.liquid
new file mode 100644
index 0000000..6b367e4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/equal.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/exist_in_db.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..abc8a51
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/exist_in_db.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/hcaptcha.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..21289c9
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/hcaptcha.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/included.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/included.liquid
new file mode 100644
index 0000000..a432b8c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/included.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/is_url.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/is_url.liquid
new file mode 100644
index 0000000..8ffaa46
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/is_url.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} url - The URL to redirect to
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.not_url'
+ assign is_url = url | matches: '^https?:\/\/[\S]+'
+
+ if is_url != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
\ No newline at end of file
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/length.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/length.liquid
new file mode 100644
index 0000000..fba5e45
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/length.liquid
@@ -0,0 +1,44 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name, key: null
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/matches.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/matches.liquid
new file mode 100644
index 0000000..19a1c8a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/matches.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/not_null.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/not_null.liquid
new file mode 100644
index 0000000..810b5f8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/not_null.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/number.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/number.liquid
new file mode 100644
index 0000000..d39591f
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/number.liquid
@@ -0,0 +1,69 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/password_complexity.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..634daa6
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/password_complexity.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+ @param {string} field_name - The name of the field to validate
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ assign decoded_pw = object.password
+ assign minimum = minimum | default: 6
+ assign maximum = maximum | default: 256
+ assign field_name = field_name | default: 'password'
+
+ function complex_password = 'modules/core/queries/variable/find', name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: message_minimum, allow_blank: null, is: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/presence.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/presence.liquid
new file mode 100644
index 0000000..6526d2b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/presence.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/truthy.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/truthy.liquid
new file mode 100644
index 0000000..86b428e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/truthy.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/unique_elements.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..4bca1e8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/uniqueness.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..76a9948
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/uniqueness.liquid
@@ -0,0 +1,37 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/lib/validations/valid_object.liquid b/pos-module-oauth-github/modules/core/public/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..6693ec3
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/lib/validations/valid_object.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/schema/status.yml b/pos-module-oauth-github/modules/core/public/schema/status.yml
new file mode 100644
index 0000000..5a8a0de
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/schema/status.yml
@@ -0,0 +1,14 @@
+name: status
+properties:
+ - name: name
+ type: string
+ - name: timestamp
+ type: datetime
+ - name: reference_id
+ type: string
+ - name: reference_schema
+ type: string
+ - name: payload
+ type: string
+ - name: requester_id
+ type: string
diff --git a/pos-module-oauth-github/modules/core/public/translations/en/common.yml b/pos-module-oauth-github/modules/core/public/translations/en/common.yml
new file mode 100644
index 0000000..19ed613
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/translations/en/common.yml
@@ -0,0 +1,4 @@
+en:
+ common:
+ deleted: 'Deleted'
+ deleted_failed: 'Deleted failed'
diff --git a/pos-module-oauth-github/modules/core/public/translations/en/validation.yml b/pos-module-oauth-github/modules/core/public/translations/en/validation.yml
new file mode 100644
index 0000000..06a1a48
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/translations/en/validation.yml
@@ -0,0 +1,50 @@
+---
+en:
+ validation:
+ disallowed: is not valid
+ not_url: is not valid url
+ blank: cannot be blank
+ email: must be a valid email
+ equal: expected %{given} to equal %{expected}
+ equal_not_verbose: does not match
+ array:
+ not_included: '`%{value}` is not a valid value'
+ not_unique: elements must be unique
+ hcaptcha: Captcha has not been solved properly, please try again
+ length:
+ minimum: is too short (minimum is %{count} characters)
+ maximum: is too long (maximum is %{count} characters)
+ is: is the wrong length (should be %{count} characters)
+ blank: is blank
+ number:
+ invalid: '`%{value}` is not a number'
+ greater_than: must be greater than %{count}
+ greater_than_or_equal: must be greater than or equal to %{count}
+ less_than: must be less than %{count}
+ less_than_or_equal: must be less than or equal to %{count}
+ equal_to: must be equal to %{count}
+ gt: must be greater than %{count}
+ gte: must be greater than or equal to %{count}
+ lt: must be less than %{count}
+ lte: must be less than or equal to %{count}
+ eq: must be equal to %{count}
+ ne: must be not equal to %{count}
+ date:
+ can_be_past: The date cannot be in the past
+ can_be_future: The date cannot be in the future
+ lt: must be before %{date}
+ lte: must be before %{date}
+ gt: must be after %{date}
+ gte: must be after or equal to %{date}
+ too_short: has to be longer than %{value} characters
+ taken: already taken
+ not_uniq: not unique
+ matches: not valid format
+ not_truthy: not true
+ not_null: not null
+ password:
+ lowercase: must include at least one lower case
+ uppercase: must include at least one upper case
+ number: must include at least one number
+ invalid: invalid
+ not_exist: not exist
diff --git a/pos-module-oauth-github/modules/core/public/views/layouts/basic.liquid b/pos-module-oauth-github/modules/core/public/views/layouts/basic.liquid
new file mode 100644
index 0000000..6b57c72
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/layouts/basic.liquid
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/pos-module-oauth-github/modules/core/public/views/layouts/mailer.html.liquid b/pos-module-oauth-github/modules/core/public/views/layouts/mailer.html.liquid
new file mode 100644
index 0000000..510f6a1
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/layouts/mailer.html.liquid
@@ -0,0 +1,46 @@
+{% liquid
+ assign rtl_languages = 'ar,arc,dv,fa,ha,he,khw,ks,ku,ps,ur,yi' | split: ','
+ if rtl_languages contains context.language
+ assign direction = 'rtl'
+ else
+ assign direction = 'ltr'
+ endif
+ assign url = 'https://' | append: context.location.host
+%}
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
+
+
diff --git a/pos-module-oauth-github/modules/core/public/views/pages/_events/index.liquid b/pos-module-oauth-github/modules/core/public/views/pages/_events/index.liquid
new file mode 100644
index 0000000..e5c90c8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/pages/_events/index.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/core/basic
+slug: _events
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function events = 'modules/core/queries/events/search', limit: 50, page: null, uuids: null
+
+ render 'modules/core/events/list', events: events
+ endif
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/pages/_events/trigger.liquid b/pos-module-oauth-github/modules/core/public/views/pages/_events/trigger.liquid
new file mode 100644
index 0000000..85099b8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/pages/_events/trigger.liquid
@@ -0,0 +1,20 @@
+---
+layout: modules/core/basic
+slug: _events/:uuid/trigger
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function event = 'modules/core/queries/events/find', uuid: context.params.uuid
+
+ if context.params.trigger
+ function event = 'modules/core/commands/events/broadcast', object: event, deprecated_delay: null, deprecated_max_attempts: null
+ echo 'BROADCASTED'
+ else
+ assign name = 'consumers/' | append: event.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+ assign event.consumers = consumers
+ endif
+
+ render 'modules/core/events/show', event: event
+ endif
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/.gitkeep b/pos-module-oauth-github/modules/core/public/views/partials/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/events/event_card.liquid b/pos-module-oauth-github/modules/core/public/views/partials/events/event_card.liquid
new file mode 100644
index 0000000..fcee8e2
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/events/event_card.liquid
@@ -0,0 +1,56 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign event_slim = event | deep_clone
+ assign _ = event_slim | hash_delete_key: 'object'
+ assign _ = event_slim | hash_delete_key: 'actor'
+ assign _ = event_slim | hash_delete_key: 'target'
+ assign _ = event_slim | hash_delete_key: 'id'
+ assign _ = event_slim | hash_delete_key: 'uuid'
+ assign _ = event_slim | hash_delete_key: 'date'
+ assign _ = event_slim | hash_delete_key: 'valid'
+ assign _ = event_slim | hash_delete_key: 'errors'
+ assign _ = event_slim | hash_delete_key: 'attributed_to'
+ assign _ = event_slim | hash_delete_key: 'type'
+ assign consumers = event_slim | hash_delete_key: 'consumers'
+%}
+
+
+ Event: {{ event.type }} {{ event.object.name | replace: "app.statuses.", "" }}
+
+
+ Date: {{ event.date | l }}
+
+
+ Attributes:
+
+
{{ event_slim }}
+
+
+
+
+
+
+
UUID: {{ event.uuid }}
+ {% if consumers %}
+
+ Consumers:
+
+ {% for consumer in consumers %}
+ {{ consumer.path }}
+ {% endfor %}
+
+
+ {% endif %}
+
+ show |
+ broadcast |
+
+
+
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/events/list.liquid b/pos-module-oauth-github/modules/core/public/views/partials/events/list.liquid
new file mode 100644
index 0000000..d6c0c4a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/events/list.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} events - The events collection
+{% enddoc %}
+
+
Events
+ {{ events.results.size }} / {{ events.total_entries }}
+ {% for event in events.results %}
+ {% render 'modules/core/events/event_card', event: event.payload %}
+
+ {% else %}
+ no events found
+ {% endfor %}
+
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/events/show.liquid b/pos-module-oauth-github/modules/core/public/views/partials/events/show.liquid
new file mode 100644
index 0000000..665a505
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/events/show.liquid
@@ -0,0 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+
Event
+
<< List
+{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/.keep b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send.liquid
new file mode 100644
index 0000000..f03248b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: lib/commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/build.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..43fbfa5
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..48cd149
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..dc2577b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/hooks/.keep b/pos-module-oauth-github/modules/core/public/views/partials/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/.keep b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/get.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..37efd30
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
@@ -0,0 +1,6 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ log 'Use queries/headscripts/get instead of lib/queries/headscripts/get', type: 'DEPRECATION'
+ function res = 'modules/core/lib/queries/headscripts/search', merge_to_object: false
+ return res
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..72607a4
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..f97ad06
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..9801f78
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/lib/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..adbdeda
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/lib/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..ae8f96c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..f6ba482
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/date.liquid
new file mode 100644
index 0000000..e4d6a7b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/date.liquid
@@ -0,0 +1,79 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..2c7f107
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..bd8035b
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/email.liquid
new file mode 100644
index 0000000..6699b19
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/email.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/equal.liquid
new file mode 100644
index 0000000..97284b8
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -0,0 +1,24 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..c86b2fc
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -0,0 +1,32 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..7693b5a
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/included.liquid
new file mode 100644
index 0000000..85b4d16
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/included.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/length.liquid
new file mode 100644
index 0000000..403a064
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/length.liquid
@@ -0,0 +1,49 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ if size == blank
+ assign message = message_blank | default: 'modules/core/validation.length.blank' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/matches.liquid
new file mode 100644
index 0000000..fb47b05
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/not_null.liquid
new file mode 100644
index 0000000..23d6bd0
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/number.liquid
new file mode 100644
index 0000000..6a11fe0
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/number.liquid
@@ -0,0 +1,70 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+ log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..04bb51c
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
+ assign decoded_pw = object.password
+
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/presence.liquid
new file mode 100644
index 0000000..06862bd
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/truthy.liquid
new file mode 100644
index 0000000..9b2a93e
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..f052483
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..66d62c7
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..690addf
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-github/modules/core/template-values.json b/pos-module-oauth-github/modules/core/template-values.json
new file mode 100644
index 0000000..d386e90
--- /dev/null
+++ b/pos-module-oauth-github/modules/core/template-values.json
@@ -0,0 +1,7 @@
+{
+ "name": "Pos Module Core",
+ "machine_name": "core",
+ "type": "module",
+ "version": "2.1.5",
+ "dependencies": {}
+}
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token.liquid
index 2415b9d..b26bf53 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token.liquid
@@ -4,8 +4,7 @@
assign query = object | querify
if object.valid
- assign headers = "{}" | parse_json
- hash_assign headers["Accept"] = "application/json"
+ assign headers = { "Accept": "application/json" }
graphql r = "modules/oauth_github/get_token", body: query, headers: headers
assign result = r.api_call_send.response.body | parse_json
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token/check.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token/check.liquid
index 10dcb21..f8ecdc8 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token/check.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_token/check.liquid
@@ -1,13 +1,16 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
-assign c = '{ "errors": {}, "valid": true }' | parse_json
+assign c = { "errors": {}, "valid": true }
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret'
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret', key: null
-hash_assign object['valid'] = c.valid
-hash_assign object['errors'] = c.errors
+assign object.valid = c.valid
+assign object.errors = c.errors
return object
%}
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_email/check.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_email/check.liquid
index 9f6147d..dfda33e 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_email/check.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_email/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
\ No newline at end of file
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_info/check.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_info/check.liquid
index 9f6147d..dfda33e 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_info/check.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/commands/get_user_info/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
\ No newline at end of file
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_redirect_url.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_redirect_url.liquid
index 0f9c3ab..32cfeb2 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_redirect_url.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_redirect_url.liquid
@@ -1,8 +1,9 @@
-{% liquid
-assign data = "{}" | parse_json
-hash_assign data['scope'] = "user:email"
-hash_assign data['client_id'] = provider.client_id
-hash_assign data["state"] = state
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+ @param {string} state - The OAuth state parameter
+{% enddoc %}
+{% liquid
+assign data = { "scope": "user:email", "client_id": provider.client_id, "state": state }
assign querified_data = data | querify
assign url = "https://github.com/login/oauth/authorize?" | append: querified_data
diff --git a/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_user_info.liquid b/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_user_info.liquid
index 53d724f..47222e1 100644
--- a/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_user_info.liquid
+++ b/pos-module-oauth-github/modules/oauth_github/public/lib/helpers/get_user_info.liquid
@@ -1,43 +1,41 @@
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+{% enddoc %}
{% liquid
# fetch token and get user data
-assign get_token_request = "{}" | parse_json
-hash_assign get_token_request["client_id"] = provider.client_id
-hash_assign get_token_request["client_secret"] = provider.secret_value
-hash_assign get_token_request["code"] = context.params.code
+assign get_token_request = { "client_id": provider.client_id, "client_secret": provider.secret_value, "code": context.params.code }
# get access token
function access_token = "modules/oauth_github/commands/get_token", data: get_token_request
assign access_token = access_token.access_token
-assign result = "{}" | parse_json
-hash_assign result["valid"] = false
+assign result = { "valid": false }
if access_token == null
return result
endif
# get user info
-assign request_data = "{}" | parse_json
-hash_assign request_data["access_token"] = access_token
+assign request_data = { "access_token": access_token }
function user_info = "modules/oauth_github/commands/get_user_info", data: request_data
if user_info.email == null
function user_emails = "modules/oauth_github/commands/get_user_email", data: request_data
for email in user_emails
if email.primary == true
- hash_assign user_info["email"] = email.email
+ assign user_info.email = email.email
endif
endfor
endif
assign name = user_info.name | split: ' '
-hash_assign result["first_name"] = name[0] | default: user_info.login
-hash_assign result["last_name"] = name[1] | default: ''
-hash_assign result["sub"] = user_info.id
-hash_assign result["email"] = user_info.email
+assign result.first_name = name[0] | default: user_info.login
+assign result.last_name = name[1] | default: ''
+assign result.sub = user_info.id
+assign result.email = user_info.email
if result.sub != null and result["email"] != null
- hash_assign result["valid"] = true
+ assign result.valid = true
endif
return result
diff --git a/pos-module-oauth-github/modules/oauth_github/template-values.json b/pos-module-oauth-github/modules/oauth_github/template-values.json
index 4576cac..566d382 100644
--- a/pos-module-oauth-github/modules/oauth_github/template-values.json
+++ b/pos-module-oauth-github/modules/oauth_github/template-values.json
@@ -2,7 +2,7 @@
"name": "pos-module-oauth-github",
"machine_name": "oauth_github",
"type": "module",
- "version": "0.0.10",
+ "version": "0.0.11",
"dependencies": {
"core": "^2.0.0"
}
diff --git a/pos-module-oauth-google/modules/core/generators/command/index.js b/pos-module-oauth-google/modules/core/generators/command/index.js
new file mode 100644
index 0000000..29fb67e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/command/index.js
@@ -0,0 +1,46 @@
+import Generator from 'yeoman-generator';
+import path from 'path';
+import pluralize from 'pluralize';
+import fs from 'fs';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate basic command files with build and check phase';
+ this.argument('commandName', { type: String, required: true, description: 'name of the command' });
+ this.props = {
+ commandName: this.options.commandName,
+ actionName: this.options.commandName.split('/').pop(),
+ modelName: this.options.commandName.split('/')[0]
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create.liquid'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}.liquid`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create/'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}/`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./graphql/create.graphql'),
+ this.destinationPath(`app/graphql/${this.props.commandName}.graphql`),
+ this.props
+ )
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('Command generated');
+ }
+};
diff --git a/pos-module-oauth-google/modules/core/generators/command/templates/graphql/create.graphql b/pos-module-oauth-google/modules/core/generators/command/templates/graphql/create.graphql
new file mode 100644
index 0000000..0ffb1e5
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/command/templates/graphql/create.graphql
@@ -0,0 +1,20 @@
+mutation <%= actionName %>(
+ # some arguments
+ # $foo: String!
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ # { name: "foo" property: $foo }
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ # foo: (name: "foo")
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create.liquid b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create.liquid
new file mode 100644
index 0000000..6d7102e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= commandName %>/build', object: object
+ function object = 'commands/<%= commandName %>/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= commandName %>' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/build.liquid b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/build.liquid
new file mode 100644
index 0000000..1fc2591
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/build.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign data = {"id": object.id, "name": object.name}
+ return data
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/check.liquid b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/check.liquid
new file mode 100644
index 0000000..2c53a6c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/command/templates/lib/commands/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/index.js b/pos-module-oauth-google/modules/core/generators/crud/index.js
new file mode 100644
index 0000000..dd839bc
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/index.js
@@ -0,0 +1,116 @@
+import Generator from 'yeoman-generator';
+import pluralize from 'pluralize';
+import startCase from 'lodash.startcase';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate table definition and commands for CRUD with graphql files';
+ this.argument('modelName', { type: String, required: true, description: 'name of the table' });
+ this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: "[]" });
+ this.option('include-views', { type: Boolean, default: false, description: 'generate pages and partials', hide: 'no' });
+
+ const attributes = this.options.attributes.map((attr) => {
+ const values = attr.split(':');
+ return {
+ name: values[0],
+ nameHuman: startCase(values[0]),
+ type: values[1]
+ };
+ });
+ this.props = {
+ modelName: this.options.modelName,
+ modelNamePlural: pluralize(this.options.modelName),
+ attributes: attributes,
+ graphqlArgumentMap: {
+ string: "String",
+ text: "String",
+ integer: "Int",
+ boolean: "Boolean",
+ float: "Float",
+ date: "String",
+ datetime: "String",
+ array: "[String]"
+ },
+ graphqlArgumentValueMap: {
+ string: "value",
+ text: "value",
+ integer: "value_int",
+ boolean: "value_boolean",
+ float: "value_float",
+ date: "value",
+ datetime: "value",
+ array: "value_array"
+ },
+ graphqlPropertyMap: {
+ string: "property",
+ text: "property",
+ integer: "property_int",
+ boolean: "property_boolean",
+ float: "property_float",
+ date: "property",
+ datetime: "property",
+ array: "property_array"
+ }
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./translations/model.yml'),
+ this.destinationPath(`app/translations/en/${this.props.modelNamePlural}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./schema/model.yml'),
+ this.destinationPath(`app/schema/${this.props.modelName}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./graphql/*.graphql'),
+ this.destinationPath(`app/graphql/${this.props.modelNamePlural}/`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/queries/model'),
+ this.destinationPath(`app/lib/queries/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/model'),
+ this.destinationPath(`app/lib/commands/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./config.yml'),
+ this.destinationPath(`app/config.yml`),
+ this.props
+ )
+ if(this.options['include-views']){
+ this.fs.copyTpl(
+ this.templatePath('./views/pages/model'),
+ this.destinationPath(`app/views/pages/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/model'),
+ this.destinationPath(`app/views/partials/theme/simple/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/field_error.liquid'),
+ this.destinationPath(`app/views/partials/theme/simple/field_error.liquid`),
+ this.props
+ )
+ }
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('CRUD generated');
+ }
+};
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/config.yml b/pos-module-oauth-google/modules/core/generators/crud/templates/config.yml
new file mode 100644
index 0000000..45cd4ce
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/config.yml
@@ -0,0 +1,16 @@
+---
+escape_output_instead_of_sanitize: true
+graphql_argument_type_mismatch_mode: 'error'
+liquid_add_old_variables: false
+liquid_check_mode: 'error'
+liquid_raise_mode: true
+require_table_for_record_delete_mutation: true
+safe_translate: true
+skip_elasticsearch: false
+slug_exact_match: true
+websockets_require_csrf_token: true
+maintenance:
+ enabled: false
+ password_constant: 'MAINTENANCE_PASSWORD'
+ partial: 'maintenance'
+---
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/create.graphql b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/create.graphql
new file mode 100644
index 0000000..67905af
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/create.graphql
@@ -0,0 +1,25 @@
+mutation create_<%= modelName %>(
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>!
+<% }); -%>
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/delete.graphql b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/delete.graphql
new file mode 100644
index 0000000..c77948f
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/delete.graphql
@@ -0,0 +1,6 @@
+mutation delete($id: ID!) {
+ record: record_delete(
+ table: "<%= modelName %>"
+ id: $id
+ ){ id }
+}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/search.graphql b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/search.graphql
new file mode 100644
index 0000000..a22b2fd
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/search.graphql
@@ -0,0 +1,39 @@
+query search(
+ $id: ID
+ $limit: Int = 20
+ $page: Int = 1
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: String
+<% }); -%>
+) {
+ <%= modelNamePlural %>: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "<%= modelName %>" }
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" value: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ sort: [
+ { created_at: { order: DESC }}
+ ]
+ ){
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/update.graphql b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/update.graphql
new file mode 100644
index 0000000..73e4556
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/graphql/update.graphql
@@ -0,0 +1,27 @@
+mutation update_<%= modelName %>(
+ $id: ID!
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>
+<% }); -%>
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ updated_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create.liquid
new file mode 100644
index 0000000..26b0a03
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/create' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
new file mode 100644
index 0000000..caf4d8d
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
new file mode 100644
index 0000000..1ce0a60
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
new file mode 100644
index 0000000..4fada40
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update.liquid
new file mode 100644
index 0000000..29a229c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/update/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/update' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
new file mode 100644
index 0000000..cffe564
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
@@ -0,0 +1,13 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/find.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/find.liquid
new file mode 100644
index 0000000..7f84e12
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/find.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = '<%= modelNamePlural %>/search', id: id, limit: 1
+
+ return r.<%= modelNamePlural %>.results.first
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/search.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/search.liquid
new file mode 100644
index 0000000..369ec37
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/lib/queries/model/search.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ graphql r = '<%= modelNamePlural %>/search', limit: limit, page: 1
+ return r.<%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/schema/model.yml b/pos-module-oauth-google/modules/core/generators/crud/templates/schema/model.yml
new file mode 100644
index 0000000..380c67b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/schema/model.yml
@@ -0,0 +1,6 @@
+name: <%= modelName %>
+properties:
+<% attributes.forEach((attr) => { -%>
+ - name: <%= attr.name %>
+ type: <%= attr.type %>
+<% }); -%>
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/translations/model.yml b/pos-module-oauth-google/modules/core/generators/crud/templates/translations/model.yml
new file mode 100644
index 0000000..879b076
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/translations/model.yml
@@ -0,0 +1,15 @@
+en:
+ app:
+ <%= modelNamePlural %>:
+ new:
+ new: New <%= modelName %>
+ edit:
+ edit: Edit <%= modelName %>
+ list:
+ add: Add <%= modelName %>
+ empty_state: You haven't added any <%= modelNamePlural %> yet.
Create your first one now!
+ edit: Edit
+ attr:
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= attr.nameHuman %>
+ <% }); -%>
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/create.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/create.liquid
new file mode 100644
index 0000000..cf27c95
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/create.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: post
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ endif
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/delete.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/delete.liquid
new file mode 100644
index 0000000..bb26a02
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/delete.liquid
@@ -0,0 +1,16 @@
+---
+slug: <%= modelNamePlural %>
+method: delete
+---
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+ function object = 'commands/<%= modelNamePlural %>/delete', object: object
+
+ # platformos-check-disable ConvertIncludeToRender
+ if object.valid
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', notice: 'modules/core/common.deleted'
+ else
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', error: 'modules/core/common.delete_failed'
+ endif
+ # platformos-check-enable ConvertIncludeToRender
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/edit.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/edit.liquid
new file mode 100644
index 0000000..b098d38
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/edit.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/index.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/index.liquid
new file mode 100644
index 0000000..75290a7
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/index.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function <%= modelNamePlural %> = 'queries/<%= modelNamePlural %>/search', limit: 100
+
+ render 'theme/simple/<%= modelNamePlural %>/index', <%= modelNamePlural %>: <%= modelNamePlural %>
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/new.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/new.liquid
new file mode 100644
index 0000000..43c1b24
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/new.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign object = {}
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ %}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/show.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/show.liquid
new file mode 100644
index 0000000..c9672cc
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/show.liquid
@@ -0,0 +1,13 @@
+---
+slug: <%= modelNamePlural %>/:id
+---
+{% liquid
+
+ assign <%= modelName %>_id = context.params.id | split: '-' | last
+ function <%= modelName %> = 'queries/<%= modelNamePlural %>/find', id: <%= modelName %>_id
+ if <%= modelName %>.id
+ render 'theme/simple/<%= modelNamePlural %>/show', <%= modelName %>: <%= modelName %>
+ else
+ response_status 404
+ endif
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/update.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/update.liquid
new file mode 100644
index 0000000..06644bd
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/pages/model/update.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: put
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+ endif
+%}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
new file mode 100644
index 0000000..16d306b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
@@ -0,0 +1,5 @@
+{% if errors %}
+
+ {{ errors | join: ', ' }}
+
+{% endif %}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
new file mode 100644
index 0000000..6bd91f2
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
@@ -0,0 +1,5 @@
+
+
{{ 'app.<%= modelNamePlural %>.edit.edit' | t }} {{ object.name }}
+
+
+{% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
new file mode 100644
index 0000000..5abe317
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
@@ -0,0 +1,9 @@
+
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
new file mode 100644
index 0000000..e12d1ee
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
@@ -0,0 +1,27 @@
+{% liquid
+ if object.id
+ assign method = 'put'
+ else
+ assign method = 'post'
+ endif
+%}
+
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
new file mode 100644
index 0000000..352f7a0
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
@@ -0,0 +1,49 @@
+
+
+
+ {% if <%= modelNamePlural %>.results.size > 0 %}
+
+
+
+<% attributes.forEach((attr) => { -%>
+
+ {{ "app.<%= modelNamePlural %>.attr.<%= attr.name %>" | t }}
+
+<% }); -%>
+
+
+
+ {% for <%= modelName %> in <%= modelNamePlural %>.results %}
+
+<% attributes.forEach((attr) => { -%>
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+<% }); -%>
+
+
+ {{ 'app.<%= modelNamePlural %>.list.edit' | t }}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ {% render 'theme/simple/<%= modelNamePlural %>/empty_state' %}
+ {% endif %}
+
+
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
new file mode 100644
index 0000000..e15a8d4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
@@ -0,0 +1,4 @@
+
+
{{ 'app.<%= modelNamePlural %>.new.new' | t }}
+ {% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
+
diff --git a/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
new file mode 100644
index 0000000..483dd89
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
@@ -0,0 +1,15 @@
+
+
+ <%= modelName %> - {{ <%= modelName %>.id }}
+
+
+ <% attributes.forEach((attr) => { -%>
+
+ {{ 'app.<%= modelNamePlural %>.attr.<%= attr.name %>' | t }}
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+ <% }); -%>
+
diff --git a/pos-module-oauth-google/modules/core/package-lock.json b/pos-module-oauth-google/modules/core/package-lock.json
new file mode 100644
index 0000000..655962c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/package-lock.json
@@ -0,0 +1,3225 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "license": "MIT",
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "node_modules/@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "4.2.10"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ }
+ },
+ "node_modules/@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=16.18.26",
+ "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0",
+ "mem-fs": "^3.0.0 || ^4.0.0-beta.1",
+ "mem-fs-editor": "^10.0.2 || >=10.0.2"
+ },
+ "peerDependenciesMeta": {
+ "@yeoman/adapter": {
+ "optional": true
+ },
+ "mem-fs": {
+ "optional": true
+ },
+ "mem-fs-editor": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
+ "node_modules/auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ },
+ "bin": {
+ "auto-changelog": "src/index.js"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "version-range": "^4.15.0"
+ },
+ "engines": {
+ "ecmascript": ">= es5",
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "license": "ISC"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "license": "MIT"
+ },
+ "node_modules/isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "license": "MIT",
+ "dependencies": {
+ "package-json": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ },
+ "acceptDependencies": {
+ "isbinaryfile": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "mem-fs": "^4.0.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "license": "MIT",
+ "dependencies": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true,
+ "bin": {
+ "parse-github-url": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "license": "ISC"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/npm-conf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "license": "ISC"
+ },
+ "node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
+ "dependencies": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18.18.5",
+ "@yeoman/types": "^1.1.1",
+ "mem-fs": "^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
+ },
+ "@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "requires": {
+ "debug": "^4.1.1"
+ }
+ },
+ "@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
+ },
+ "@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "peer": true,
+ "requires": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "requires": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "requires": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "requires": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "requires": {
+ "@octokit/types": "^14.0.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "requires": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "requires": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="
+ },
+ "@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "requires": {
+ "graceful-fs": "4.2.10"
+ }
+ },
+ "@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "requires": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ }
+ },
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
+ },
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
+ },
+ "@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
+ },
+ "@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "peer": true,
+ "requires": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
+ },
+ "@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "requires": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA=="
+ },
+ "@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "peer": true,
+ "requires": {}
+ },
+ "array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="
+ },
+ "array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
+ },
+ "async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="
+ },
+ "auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "requires": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ }
+ },
+ "b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "requires": {}
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "requires": {}
+ },
+ "before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+ },
+ "binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+ },
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "requires": {
+ "version-range": "^4.15.0"
+ }
+ },
+ "ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "requires": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
+ },
+ "fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ }
+ },
+ "fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="
+ },
+ "first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ=="
+ },
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ },
+ "github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "requires": {
+ "@octokit/rest": "^21.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "requires": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "requires": {
+ "lru-cache": "^10.0.1"
+ }
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
+ },
+ "ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="
+ },
+ "index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+ },
+ "isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "requires": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="
+ },
+ "latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "requires": {
+ "package-json": "^10.0.0"
+ }
+ },
+ "lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "peer": true,
+ "requires": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ }
+ },
+ "mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "peer": true,
+ "requires": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "requires": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "requires": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "requires": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ }
+ },
+ "parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "requires": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ }
+ },
+ "read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "dependencies": {
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "requires": {
+ "@pnpm/npm-conf": "^3.0.2"
+ }
+ },
+ "registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "requires": {
+ "rc": "1.2.8"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
+ },
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
+ "simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "requires": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ }
+ },
+ "slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
+ },
+ "sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "requires": {
+ "is-plain-obj": "^4.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="
+ },
+ "streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "requires": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "requires": {
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "requires": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ },
+ "teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "requires": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "requires": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
+ },
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
+ },
+ "universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg=="
+ },
+ "vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "requires": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ }
+ },
+ "vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "requires": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "peer": true,
+ "requires": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ }
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/package.json b/pos-module-oauth-google/modules/core/package.json
new file mode 100644
index 0000000..49515a0
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "description": "Module description",
+ "type": "module",
+ "scripts": {
+ "version": "(cd ../../ && pos-cli modules version core -p) && git add template-values.json && auto-changelog -p && git add CHANGELOG.md"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Platform-OS/pos-module-core.git"
+ },
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Platform-OS/pos-module-core/issues"
+ },
+ "homepage": "https://github.com/Platform-OS/pos-module-core#readme",
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ },
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "auto-changelog": {
+ "template": "changelog-template.hbs",
+ "unreleased": true,
+ "commitLimit": false
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/api_calls/generic.liquid b/pos-module-oauth-google/modules/core/public/api_calls/generic.liquid
new file mode 100644
index 0000000..0a3289b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/api_calls/generic.liquid
@@ -0,0 +1,6 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{{ data.payload }}
diff --git a/pos-module-oauth-google/modules/core/public/api_calls/generic_x_form_encoded.liquid b/pos-module-oauth-google/modules/core/public/api_calls/generic_x_form_encoded.liquid
new file mode 100644
index 0000000..4085222
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/api_calls/generic_x_form_encoded.liquid
@@ -0,0 +1,10 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{% liquid
+ function url = 'modules/core/helpers/hash_to_x_form_encoded', payload: data.payload
+ print url
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/emails/.keep b/pos-module-oauth-google/modules/core/public/emails/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/emails/generic.liquid b/pos-module-oauth-google/modules/core/public/emails/generic.liquid
new file mode 100644
index 0000000..240ce94
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/emails/generic.liquid
@@ -0,0 +1,13 @@
+---
+from: "{{ data.from }}"
+layout: "{{ data.layout }}"
+to: "{{ data.to }}"
+cc: "{{ data.cc }}"
+bcc: "{{ data.bcc }}"
+subject: "{{ data.subject }}"
+---
+{% liquid
+ # platformos-check-disable
+ include data.partial, data: data.data
+ # platformos-check-enable
+%}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/.keep b/pos-module-oauth-google/modules/core/public/graphql/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/graphql/api_calls/send.graphql b/pos-module-oauth-google/modules/core/public/graphql/api_calls/send.graphql
new file mode 100644
index 0000000..b26d03f
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/api_calls/send.graphql
@@ -0,0 +1,12 @@
+mutation ($template: String!, $data: HashObject!, $options: ApiCallSendOptions) {
+ api_call: api_call_send(
+ data: $data
+ template: { name: $template }
+ options: $options
+ ) {
+ response{ status body }
+ errors {
+ message
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/email/send.graphql b/pos-module-oauth-google/modules/core/public/graphql/email/send.graphql
new file mode 100644
index 0000000..2f9fc39
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/email/send.graphql
@@ -0,0 +1,9 @@
+mutation ($data: HashObject!, $template: String!){
+ email_send(
+ template: { name: $template }
+ data: $data
+ ){
+ is_scheduled_to_send
+ errors { message }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/events/consumers.graphql b/pos-module-oauth-google/modules/core/public/graphql/events/consumers.graphql
new file mode 100644
index 0000000..b13d23b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/events/consumers.graphql
@@ -0,0 +1,15 @@
+query consumers($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { contains: $name }
+ }
+ sort: {
+ path: { order: ASC }
+ }
+ ) {
+ results {
+ path
+ metadata
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/events/create.graphql b/pos-module-oauth-google/modules/core/public/graphql/events/create.graphql
new file mode 100644
index 0000000..77bc1d9
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/events/create.graphql
@@ -0,0 +1,7 @@
+mutation create_event($payload: ActivityStreamsPayload!) {
+ activity_create(
+ payload: $payload
+ ) {
+ payload
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/events/events_checks.graphql b/pos-module-oauth-google/modules/core/public/graphql/events/events_checks.graphql
new file mode 100644
index 0000000..c326d87
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/events/events_checks.graphql
@@ -0,0 +1,11 @@
+query events_checks($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { ends_with: $name }
+ }
+ ) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/events/search.graphql b/pos-module-oauth-google/modules/core/public/graphql/events/search.graphql
new file mode 100644
index 0000000..4e78dd2
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/events/search.graphql
@@ -0,0 +1,14 @@
+query ac($limit: Int = 100 $page: Int = 1 $uuids: [String!]) {
+ activities: activities(
+ per_page: $limit,
+ page: $page
+ uuids: $uuids
+ sort: { created_at: { order: DESC } }
+ ){
+ total_entries
+ total_pages
+ results {
+ payload
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/hook/search.graphql b/pos-module-oauth-google/modules/core/public/graphql/hook/search.graphql
new file mode 100644
index 0000000..37e31e2
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/hook/search.graphql
@@ -0,0 +1,7 @@
+query ($hook: String) {
+ admin_liquid_partials(filter: { path: { ends_with: $hook } }) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/records/count.graphql b/pos-module-oauth-google/modules/core/public/graphql/records/count.graphql
new file mode 100644
index 0000000..9a21894
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/records/count.graphql
@@ -0,0 +1,26 @@
+query records_count(
+ $property_name: String!
+ $property_value: String!
+ $scope_name: String!
+ $scope_value: String
+ $table: String!
+ $not_ids: [ID!]
+ $ids: [ID!]
+ $exclude_name: String!
+ $exclude_value: String
+) {
+ records(
+ per_page: 1
+ filter: {
+ id: { not_value_in: $not_ids, value_in: $ids }
+ table: { value: $table }
+ properties: [
+ { name: $property_name, value: $property_value }
+ { name: $scope_name, value: $scope_value }
+ { name: $exclude_name, not_value: $exclude_value }
+ ]
+ }
+ ) {
+ total_entries
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/session/delete.graphql b/pos-module-oauth-google/modules/core/public/graphql/session/delete.graphql
new file mode 100644
index 0000000..c83de59
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/session/delete.graphql
@@ -0,0 +1,5 @@
+mutation ($name: String!){
+ session_delete_field(
+ name: $name
+ )
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/session/set.graphql b/pos-module-oauth-google/modules/core/public/graphql/session/set.graphql
new file mode 100644
index 0000000..9069f25
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/session/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: Any!){
+ session_create_field(
+ name: $name
+ value: $value
+ )
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/statuses/create.graphql b/pos-module-oauth-google/modules/core/public/graphql/statuses/create.graphql
new file mode 100644
index 0000000..7274afc
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/statuses/create.graphql
@@ -0,0 +1,34 @@
+mutation create_status(
+ $name: String!
+ $timestamp: String!
+ $reference_id: String!
+ $reference_schema: String
+ $payload: String
+ $requester_id: String!
+) {
+ record: record_create(
+ record: {
+ table: "modules/core/status"
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "payload", value: $payload }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ ) {
+ id
+ created_at
+ deleted_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/statuses/delete.graphql b/pos-module-oauth-google/modules/core/public/graphql/statuses/delete.graphql
new file mode 100644
index 0000000..fb333ab
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/statuses/delete.graphql
@@ -0,0 +1,5 @@
+mutation delete_status($id: ID!) {
+ record_delete(table: "modules/core/status", id: $id) {
+ id
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/statuses/search.graphql b/pos-module-oauth-google/modules/core/public/graphql/statuses/search.graphql
new file mode 100644
index 0000000..8beffdc
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/statuses/search.graphql
@@ -0,0 +1,45 @@
+query search(
+ $id: ID
+ $limit: Int!
+ $page: Int!
+ $name: String
+ $timestamp: String
+ $reference_id: String
+ $reference_schema: String
+ $requester_id: String
+) {
+ statuses: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "modules/core/status" }
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ sort: [{ created_at: { order: DESC } }]
+ ) {
+ total_entries
+ has_next_page
+ has_previous_page
+ current_page
+
+ results {
+ id
+ created_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/graphql/variable/set.graphql b/pos-module-oauth-google/modules/core/public/graphql/variable/set.graphql
new file mode 100644
index 0000000..3c7b0d9
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/graphql/variable/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: String!) {
+ variable: constant_set(name: $name, value: $value) {
+ name
+ value
+ }
+}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/.keep b/pos-module-oauth-google/modules/core/public/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/email/send.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/email/send.liquid
new file mode 100644
index 0000000..1fc5273
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/email/send.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/email/send/build.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/email/send/check.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/broadcast.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/broadcast.liquid
new file mode 100644
index 0000000..ec2b6bd
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/broadcast.liquid
@@ -0,0 +1,29 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ if object.type == blank
+ log 'ERROR: events broadcast type blank'
+ return null
+ endif
+ assign priorities = 'low,default,high' | split: ','
+
+ assign name = 'consumers/' | append: object.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+
+ assign object.consumers = consumers
+ for consumer in consumers
+ assign priority = 'default'
+ if priorities contains consumer.metadata.priority
+ assign priority = consumer.metadata.priority
+ endif
+ assign max_attempts = consumer.metadata.max_attempts | default: deprecated_max_attempts | default: 9
+ assign delay = consumer.metadata.delay | default: deprecated_delay | default: 0
+
+ background _id = consumer.path, event: object, priority: priority, delay: delay, max_attempts: max_attempts
+ endfor
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/create.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/create.liquid
new file mode 100644
index 0000000..c32c970
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/create.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ function event = 'modules/core/commands/events/create/build', type: type, object: object
+ function event = 'modules/core/commands/events/create/check', object: event, type: type
+ if event.valid
+ function event = 'modules/core/commands/events/create/execute', object: event
+ if event.valid
+ assign source_name = 'modules/core/commands/events/create:' | append: type
+ background _job_id = 'modules/core/commands/events/broadcast', object: event, deprecated_max_attempts: deprecated_max_attempts, deprecated_delay: deprecated_delay, source_name: source_name, priority: 'high'
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+
+ return event
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/create/build.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/build.liquid
new file mode 100644
index 0000000..32e10ed
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/build.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign now = 'now' | to_time
+ assign data = object
+ assign data.type = type
+ assign data.date = now
+
+ return data
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/create/check.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/check.liquid
new file mode 100644
index 0000000..a11a644
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/check.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date', key: null
+
+ assign name = 'events/' | append: object.type
+ graphql event_check_partials = 'modules/core/events/events_checks', name: name | dig: "admin_liquid_partials", "results"
+ for partial in event_check_partials
+ assign is_event_definition = partial.path | matches: '^(modules/[^/]+/events/[^/]++|events/[^/]+)$'
+ if is_event_definition
+ assign event_check_partial = partial
+ break
+ endif
+ endfor
+
+ if event_check_partial
+ function event_result = event_check_partial.path, event: object
+ if event_result.valid != true
+ assign c.errors.object = event_result.errors
+ assign c.valid = false
+ endif
+ else
+ assign message = 'There is no such event: ' | append: object.type | append: '. Please add event check in events/' | append: object.type
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message, key: null
+ endif
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+ return object
+ %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/create/execute.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/execute.liquid
new file mode 100644
index 0000000..d94fff4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/create/execute.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ graphql r = 'modules/core/events/create', payload: object
+
+ assign object = r.activity_create.payload
+ assign object.valid = true
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/events/publish.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/events/publish.liquid
new file mode 100644
index 0000000..586ad27
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/events/publish.liquid
@@ -0,0 +1,27 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+{% enddoc %}
+{% liquid
+ if delay > 0
+ log 'use metadata.delay in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+ if max_attempts
+ log 'use metadata.max_attempts in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+
+ unless type
+ log 'type is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+ unless object
+ log 'object is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+
+ function event = "modules/core/commands/events/create", type: type, object: object, deprecated_max_attempts: max_attempts, deprecated_delay: delay
+
+ return event
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/execute.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/execute.liquid
new file mode 100644
index 0000000..e0510a4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/execute.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} mutation_name - The GraphQL mutation name
+ @param {object} object - The object to process
+ @param {string} selection - The GraphQL result selection key
+{% enddoc %}
+{% liquid
+ assign selection = selection | default: 'record'
+
+ graphql r = mutation_name, args: object
+ if r.errors
+ log r, type: "ERROR: modules/core/commands/execute"
+ endif
+
+ assign object = r[selection]
+ assign object.valid = true
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/hook/alter.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..19f42fb
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/hook/alter.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/hook/fire.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..0b35c38
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/session/clear.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/session/clear.liquid
new file mode 100644
index 0000000..b823fa5
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/session/clear.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ graphql _ = 'modules/core/session/delete', name: key
+ return true
+ endif
+ return false
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/session/get.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/session/get.liquid
new file mode 100644
index 0000000..02b8240
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/session/get.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {boolean} clear - If true, clear the session value after reading
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ assign value = context.session[key] | parse_json
+ if clear
+ graphql _ = 'modules/core/session/delete', name: key
+ endif
+
+ return value
+ endif
+ return null
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/session/set.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/session/set.liquid
new file mode 100644
index 0000000..3441120
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/session/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | json
+ graphql _ = 'modules/core/session/set', name: key, value: value
+ return true
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create.liquid
new file mode 100644
index 0000000..dc5f46d
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create.liquid
@@ -0,0 +1,25 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/create/build', name: name, timestamp: timestamp, reference_id: reference_id, reference_schema: reference_schema, payload: payload, requester_id: requester_id
+ function object = 'modules/core/commands/statuses/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object, selection: null
+ if object.valid
+ function _ = 'modules/core/commands/events/publish', type: 'status_created', object: object, delay: delay, max_attempts: max_attempts
+ endif
+ else
+ log object, 'showme STATUS-INVALID'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/build.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/build.liquid
new file mode 100644
index 0000000..b46956a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/build.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% parse_json object %}
+ {
+ "name": {{ name | json }},
+ "timestamp": {{ timestamp | default: 'now' | to_time | json }},
+ "reference_id": {{ reference_id | json }},
+ "reference_schema": {{ reference_schema | json }},
+ "payload": {{ payload | json }},
+ "requester_id": {{ requester_id | json }}
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/check.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/check.liquid
new file mode 100644
index 0000000..61a2d21
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/create/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete.liquid
new file mode 100644
index 0000000..5c79d78
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/delete/build', id: id
+ function object = 'modules/core/commands/statuses/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/delete', selection: 'record_delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/build.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/build.liquid
new file mode 100644
index 0000000..29c1322
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/build.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ assign object = {"id": id}
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/check.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/check.liquid
new file mode 100644
index 0000000..737a3fd
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/statuses/delete/check.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/commands/variable/set.liquid b/pos-module-oauth-google/modules/core/public/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..cdbc3b8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/commands/variable/set.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/events/status_created.liquid b/pos-module-oauth-google/modules/core/public/lib/events/status_created.liquid
new file mode 100644
index 0000000..02541f7
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/events/status_created.liquid
@@ -0,0 +1,21 @@
+---
+metadata:
+ event:
+ name
+ reference_id
+ reference_schema
+ requester_id
+ payload
+---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id', key: null
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/authenticity_token.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/authenticity_token.liquid
new file mode 100644
index 0000000..6262ed4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/authenticity_token.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} authenticity_token - The authenticity token from the form
+ @param {string} token - The authenticity token value
+{% enddoc %}
+{% assign token = token | default: authenticity_token | default: context.authenticity_token %}
+{% unless token %}
+
Liquid Error AuthenticityTokenNotFound
+{% endunless %}
+
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/flash/publish.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/flash/publish.liquid
new file mode 100644
index 0000000..cd5847d
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/flash/publish.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+{% enddoc %}
+{% liquid
+ if error and error contains 'app.'
+ assign error = error | t
+ endif
+
+ if notice and notice contains 'app.'
+ assign notice = notice | t
+ endif
+
+ if info and info contains 'app.'
+ assign info = info | t
+ endif
+%}
+
+{% parse_json flash %}
+ {
+ "error": {{ error | json }},
+ "notice": {{ notice | json }},
+ "info": {{ info | json }},
+ "from": {{ context.location.pathname | json }},
+ "now": {{ force_clear | default: false }}
+ }
+{% endparse_json %}
+
+{% liquid
+ assign sflash = flash | json
+ session sflash = sflash
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
new file mode 100644
index 0000000..05d1820
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {object} payload - The payload data
+{% enddoc %}
+{% liquid
+ assign parameters = '' | split: ','
+ for pair in payload
+ assign component = pair[0] | append: '={' | append: pair[0] | append: '}'
+ assign parameters << component
+ endfor
+ if parameters.size > 0
+ assign x_form_encoded = parameters | join: '&' | expand_url_template: payload
+ else
+ assign x_form_encoded = ''
+ endif
+
+ return x_form_encoded
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/log_time.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/log_time.liquid
new file mode 100644
index 0000000..447397a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/log_time.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {string} _start - The start time for measuring elapsed time
+ @param {string} type - The type identifier
+ @param {string} env - The environment name for logging
+{% enddoc %}
+{% liquid
+ assign _stop = 'now' | to_time
+ assign _diff = _start | time_diff: _stop
+ if env
+ log _diff, type: type, env: env
+ else
+ log _diff, type: type
+ endif
+
+ return true
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/redirect_to.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/redirect_to.liquid
new file mode 100644
index 0000000..8f14d81
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/redirect_to.liquid
@@ -0,0 +1,50 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {object} object - The object to process
+ @param {string} default - The default value
+ @param {string} format - The response format
+ @param {string} url - The URL to redirect to
+{% enddoc %}
+{% liquid
+ if url == blank and context.session.return_to != blank
+ assign url = context.session.return_to
+ session return_to = null
+ endif
+
+ if context.params.return_to != blank or context.params.redirect_to != blank and url == blank
+ assign url = context.params.return_to | default: context.params.redirect_to | url_decode
+ assign not_start_with_slash = url | matches: '^(?!\/)(.+)'
+
+ # for security reasons, we do not allow redirecting to external URLs based on unsafe user input
+ assign wrong_url = url | matches: '^\/\/'
+ if not_start_with_slash or wrong_url
+ assign url = '/'
+ endif
+ else
+ assign default = default | default: '/'
+ assign url = url | default: default
+ endif
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info, force_clear: null
+ # platformos-check-enable DeprecatedTag
+
+ if format == 'json'
+ assign response_json = {"type": "redirect", "url": url}
+ if object.valid
+ echo response_json
+ else
+ response_status 422
+ assign res = { "errors": response_json.errors }
+
+ echo res
+ endif
+
+ else
+ redirect_to url
+ endif
+
+ break
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/register_error.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_all.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_all.liquid
new file mode 100644
index 0000000..7ed01d5
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_all.liquid
@@ -0,0 +1,18 @@
+{% comment %}
+ we need the to_json | parse_json hack because time_zones.all is an array of TimeZoneDrop (not an object)
+ this prevents us from using array filters or pass the timezone as reference (return it from a function, etc)
+ should be fixed on the platform level
+{% endcomment %}
+{% comment %}
+Returns an array of timezone objects in the following format:
+{
+ "formatted_name":"(GMT-12:00) International Date Line West",
+ "formatted_offset":"-12:00",
+ "name":"International Date Line West",
+ "utc_offset":-43200,
+ "abbreviation":"-12",
+ "friendly_name_with_region":"Etc - GMT+12",
+ "friendly_name_without_region":"GMT+12"
+}
+{% endcomment %}
+{% return context.globals.time_zones.all | parse_json %}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_name.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_name.liquid
new file mode 100644
index 0000000..20f429d
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_name.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: name: name
+
+ return timezone
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_offset.liquid b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
new file mode 100644
index 0000000..478d3ae
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {number} offset
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: formatted_offset: offset
+
+ return timezone
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/hooks/.keep b/pos-module-oauth-google/modules/core/public/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/.keep b/pos-module-oauth-google/modules/core/public/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/constants/find.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/constants/find.liquid
new file mode 100644
index 0000000..84fe8d8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/constants/find.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% if context.constants %}
+ {% assign value = context.constants[name] %}
+{% else %}
+ {% graphql r, name: name %}
+ query get_constant($name: String!) {
+ constant(filter: { name: $name }) {
+ name
+ value
+ }
+ }
+ {% endgraphql %}
+ {% assign value = r.constant.value %}
+{% endif %}
+
+{% liquid
+ case type
+ when "boolean"
+ if value == "true"
+ return true
+ else
+ return false
+ endif
+ when "integer"
+ assign value = value | plus: 0
+ return value
+ when "array"
+ assign value = value | split: ','
+ return value
+ when "time"
+ return value | to_time
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/events/find.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/events/find.liquid
new file mode 100644
index 0000000..c3d264a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/events/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ if uuid == blank
+ return null
+ endif
+
+ function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid, page: null
+
+ return events.results.first.payload
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/events/search.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/events/search.liquid
new file mode 100644
index 0000000..2569598
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/events/search.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} uuids - List of UUID identifiers
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign uuids = uuids | default: null
+
+ graphql r = 'modules/core/events/search', limit: limit, page: page, uuids: uuids
+
+ assign events = r.activities
+
+ return events
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/get.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..e2453ef
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/get.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/headscripts/search', merge_to_object: null
+ return res
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/search.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..989f536
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/headscripts/search.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/hook/search.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..5b49f62
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/hook/search.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/module/exists.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..474665d
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/registry/get.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..aa3524a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/registry/search.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..96116a4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/statuses/find.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/statuses/find.liquid
new file mode 100644
index 0000000..b7cf078
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/statuses/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = 'modules/core/statuses/search', id: id, limit: 1, page: 1
+
+ return r.statuses.results.first
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/statuses/search.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/statuses/search.liquid
new file mode 100644
index 0000000..f4f79d8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/statuses/search.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} name - The name identifier
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign limit = limit | default: 20
+
+ graphql r = 'modules/core/statuses/search', limit: limit, page: page, id: id, name: name, reference_id: reference_id, requester_id: requester_id, reference_schema: reference_schema, timestamp: timestamp
+
+ return r.statuses
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/variable/find.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/queries/variable/get.liquid b/pos-module-oauth-google/modules/core/public/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..e51e5de
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/date.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/date.liquid
new file mode 100644
index 0000000..7125e98
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/date.liquid
@@ -0,0 +1,78 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/each_element_length.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..85f5315
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/elements_included.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..6b58bde
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/elements_included.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/email.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/email.liquid
new file mode 100644
index 0000000..39c8029
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/email.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/equal.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/equal.liquid
new file mode 100644
index 0000000..6b367e4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/equal.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/exist_in_db.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..abc8a51
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/exist_in_db.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/hcaptcha.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..21289c9
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/hcaptcha.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/included.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/included.liquid
new file mode 100644
index 0000000..a432b8c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/included.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/is_url.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/is_url.liquid
new file mode 100644
index 0000000..8ffaa46
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/is_url.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} url - The URL to redirect to
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.not_url'
+ assign is_url = url | matches: '^https?:\/\/[\S]+'
+
+ if is_url != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
\ No newline at end of file
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/length.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/length.liquid
new file mode 100644
index 0000000..fba5e45
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/length.liquid
@@ -0,0 +1,44 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name, key: null
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/matches.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/matches.liquid
new file mode 100644
index 0000000..19a1c8a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/matches.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/not_null.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/not_null.liquid
new file mode 100644
index 0000000..810b5f8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/not_null.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/number.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/number.liquid
new file mode 100644
index 0000000..d39591f
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/number.liquid
@@ -0,0 +1,69 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/password_complexity.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..634daa6
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/password_complexity.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+ @param {string} field_name - The name of the field to validate
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ assign decoded_pw = object.password
+ assign minimum = minimum | default: 6
+ assign maximum = maximum | default: 256
+ assign field_name = field_name | default: 'password'
+
+ function complex_password = 'modules/core/queries/variable/find', name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: message_minimum, allow_blank: null, is: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/presence.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/presence.liquid
new file mode 100644
index 0000000..6526d2b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/presence.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/truthy.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/truthy.liquid
new file mode 100644
index 0000000..86b428e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/truthy.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/unique_elements.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..4bca1e8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/uniqueness.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..76a9948
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/uniqueness.liquid
@@ -0,0 +1,37 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/lib/validations/valid_object.liquid b/pos-module-oauth-google/modules/core/public/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..6693ec3
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/lib/validations/valid_object.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/schema/status.yml b/pos-module-oauth-google/modules/core/public/schema/status.yml
new file mode 100644
index 0000000..5a8a0de
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/schema/status.yml
@@ -0,0 +1,14 @@
+name: status
+properties:
+ - name: name
+ type: string
+ - name: timestamp
+ type: datetime
+ - name: reference_id
+ type: string
+ - name: reference_schema
+ type: string
+ - name: payload
+ type: string
+ - name: requester_id
+ type: string
diff --git a/pos-module-oauth-google/modules/core/public/translations/en/common.yml b/pos-module-oauth-google/modules/core/public/translations/en/common.yml
new file mode 100644
index 0000000..19ed613
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/translations/en/common.yml
@@ -0,0 +1,4 @@
+en:
+ common:
+ deleted: 'Deleted'
+ deleted_failed: 'Deleted failed'
diff --git a/pos-module-oauth-google/modules/core/public/translations/en/validation.yml b/pos-module-oauth-google/modules/core/public/translations/en/validation.yml
new file mode 100644
index 0000000..06a1a48
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/translations/en/validation.yml
@@ -0,0 +1,50 @@
+---
+en:
+ validation:
+ disallowed: is not valid
+ not_url: is not valid url
+ blank: cannot be blank
+ email: must be a valid email
+ equal: expected %{given} to equal %{expected}
+ equal_not_verbose: does not match
+ array:
+ not_included: '`%{value}` is not a valid value'
+ not_unique: elements must be unique
+ hcaptcha: Captcha has not been solved properly, please try again
+ length:
+ minimum: is too short (minimum is %{count} characters)
+ maximum: is too long (maximum is %{count} characters)
+ is: is the wrong length (should be %{count} characters)
+ blank: is blank
+ number:
+ invalid: '`%{value}` is not a number'
+ greater_than: must be greater than %{count}
+ greater_than_or_equal: must be greater than or equal to %{count}
+ less_than: must be less than %{count}
+ less_than_or_equal: must be less than or equal to %{count}
+ equal_to: must be equal to %{count}
+ gt: must be greater than %{count}
+ gte: must be greater than or equal to %{count}
+ lt: must be less than %{count}
+ lte: must be less than or equal to %{count}
+ eq: must be equal to %{count}
+ ne: must be not equal to %{count}
+ date:
+ can_be_past: The date cannot be in the past
+ can_be_future: The date cannot be in the future
+ lt: must be before %{date}
+ lte: must be before %{date}
+ gt: must be after %{date}
+ gte: must be after or equal to %{date}
+ too_short: has to be longer than %{value} characters
+ taken: already taken
+ not_uniq: not unique
+ matches: not valid format
+ not_truthy: not true
+ not_null: not null
+ password:
+ lowercase: must include at least one lower case
+ uppercase: must include at least one upper case
+ number: must include at least one number
+ invalid: invalid
+ not_exist: not exist
diff --git a/pos-module-oauth-google/modules/core/public/views/layouts/basic.liquid b/pos-module-oauth-google/modules/core/public/views/layouts/basic.liquid
new file mode 100644
index 0000000..6b57c72
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/layouts/basic.liquid
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/pos-module-oauth-google/modules/core/public/views/layouts/mailer.html.liquid b/pos-module-oauth-google/modules/core/public/views/layouts/mailer.html.liquid
new file mode 100644
index 0000000..510f6a1
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/layouts/mailer.html.liquid
@@ -0,0 +1,46 @@
+{% liquid
+ assign rtl_languages = 'ar,arc,dv,fa,ha,he,khw,ks,ku,ps,ur,yi' | split: ','
+ if rtl_languages contains context.language
+ assign direction = 'rtl'
+ else
+ assign direction = 'ltr'
+ endif
+ assign url = 'https://' | append: context.location.host
+%}
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
+
+
diff --git a/pos-module-oauth-google/modules/core/public/views/pages/_events/index.liquid b/pos-module-oauth-google/modules/core/public/views/pages/_events/index.liquid
new file mode 100644
index 0000000..e5c90c8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/pages/_events/index.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/core/basic
+slug: _events
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function events = 'modules/core/queries/events/search', limit: 50, page: null, uuids: null
+
+ render 'modules/core/events/list', events: events
+ endif
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/pages/_events/trigger.liquid b/pos-module-oauth-google/modules/core/public/views/pages/_events/trigger.liquid
new file mode 100644
index 0000000..85099b8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/pages/_events/trigger.liquid
@@ -0,0 +1,20 @@
+---
+layout: modules/core/basic
+slug: _events/:uuid/trigger
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function event = 'modules/core/queries/events/find', uuid: context.params.uuid
+
+ if context.params.trigger
+ function event = 'modules/core/commands/events/broadcast', object: event, deprecated_delay: null, deprecated_max_attempts: null
+ echo 'BROADCASTED'
+ else
+ assign name = 'consumers/' | append: event.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+ assign event.consumers = consumers
+ endif
+
+ render 'modules/core/events/show', event: event
+ endif
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/.gitkeep b/pos-module-oauth-google/modules/core/public/views/partials/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/events/event_card.liquid b/pos-module-oauth-google/modules/core/public/views/partials/events/event_card.liquid
new file mode 100644
index 0000000..fcee8e2
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/events/event_card.liquid
@@ -0,0 +1,56 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign event_slim = event | deep_clone
+ assign _ = event_slim | hash_delete_key: 'object'
+ assign _ = event_slim | hash_delete_key: 'actor'
+ assign _ = event_slim | hash_delete_key: 'target'
+ assign _ = event_slim | hash_delete_key: 'id'
+ assign _ = event_slim | hash_delete_key: 'uuid'
+ assign _ = event_slim | hash_delete_key: 'date'
+ assign _ = event_slim | hash_delete_key: 'valid'
+ assign _ = event_slim | hash_delete_key: 'errors'
+ assign _ = event_slim | hash_delete_key: 'attributed_to'
+ assign _ = event_slim | hash_delete_key: 'type'
+ assign consumers = event_slim | hash_delete_key: 'consumers'
+%}
+
+
+ Event: {{ event.type }} {{ event.object.name | replace: "app.statuses.", "" }}
+
+
+ Date: {{ event.date | l }}
+
+
+ Attributes:
+
+
{{ event_slim }}
+
+
+
+
+
+
+
UUID: {{ event.uuid }}
+ {% if consumers %}
+
+ Consumers:
+
+ {% for consumer in consumers %}
+ {{ consumer.path }}
+ {% endfor %}
+
+
+ {% endif %}
+
+ show |
+ broadcast |
+
+
+
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/events/list.liquid b/pos-module-oauth-google/modules/core/public/views/partials/events/list.liquid
new file mode 100644
index 0000000..d6c0c4a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/events/list.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} events - The events collection
+{% enddoc %}
+
+
Events
+ {{ events.results.size }} / {{ events.total_entries }}
+ {% for event in events.results %}
+ {% render 'modules/core/events/event_card', event: event.payload %}
+
+ {% else %}
+ no events found
+ {% endfor %}
+
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/events/show.liquid b/pos-module-oauth-google/modules/core/public/views/partials/events/show.liquid
new file mode 100644
index 0000000..665a505
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/events/show.liquid
@@ -0,0 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+
Event
+
<< List
+{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/.keep b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send.liquid
new file mode 100644
index 0000000..f03248b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: lib/commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/build.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..43fbfa5
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..48cd149
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..dc2577b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/hooks/.keep b/pos-module-oauth-google/modules/core/public/views/partials/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/.keep b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/get.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..37efd30
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
@@ -0,0 +1,6 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ log 'Use queries/headscripts/get instead of lib/queries/headscripts/get', type: 'DEPRECATION'
+ function res = 'modules/core/lib/queries/headscripts/search', merge_to_object: false
+ return res
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..72607a4
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..f97ad06
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..9801f78
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/lib/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..adbdeda
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/lib/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..ae8f96c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..f6ba482
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/date.liquid
new file mode 100644
index 0000000..e4d6a7b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/date.liquid
@@ -0,0 +1,79 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..2c7f107
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..bd8035b
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/email.liquid
new file mode 100644
index 0000000..6699b19
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/email.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/equal.liquid
new file mode 100644
index 0000000..97284b8
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -0,0 +1,24 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..c86b2fc
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -0,0 +1,32 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..7693b5a
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/included.liquid
new file mode 100644
index 0000000..85b4d16
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/included.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/length.liquid
new file mode 100644
index 0000000..403a064
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/length.liquid
@@ -0,0 +1,49 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ if size == blank
+ assign message = message_blank | default: 'modules/core/validation.length.blank' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/matches.liquid
new file mode 100644
index 0000000..fb47b05
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/not_null.liquid
new file mode 100644
index 0000000..23d6bd0
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/number.liquid
new file mode 100644
index 0000000..6a11fe0
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/number.liquid
@@ -0,0 +1,70 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+ log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..04bb51c
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
+ assign decoded_pw = object.password
+
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/presence.liquid
new file mode 100644
index 0000000..06862bd
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/truthy.liquid
new file mode 100644
index 0000000..9b2a93e
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..f052483
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..66d62c7
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..690addf
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-oauth-google/modules/core/template-values.json b/pos-module-oauth-google/modules/core/template-values.json
new file mode 100644
index 0000000..d386e90
--- /dev/null
+++ b/pos-module-oauth-google/modules/core/template-values.json
@@ -0,0 +1,7 @@
+{
+ "name": "Pos Module Core",
+ "machine_name": "core",
+ "type": "module",
+ "version": "2.1.5",
+ "dependencies": {}
+}
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token.liquid
index d3b4b64..b87f806 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token.liquid
@@ -5,8 +5,7 @@
if object.valid
assign query = object | querify
- assign headers = "{}" | parse_json
- hash_assign headers["Accept"] = "application/json"
+ assign headers = { "Accept": "application/json" }
graphql r = "modules/oauth_google/get_token", body: query, headers: headers
assign result = r.api_call_send.response.body | parse_json
return result
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/build.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/build.liquid
index ffe94d3..c762a1b 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/build.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/build.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {object} object - The object containing token request data
+ @param {string} location - The redirect URI location
+{% enddoc %}
{% parse_json object %}
{
"grant_type": "authorization_code",
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/check.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/check.liquid
index 4a32761..e19496b 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/check.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_token/check.liquid
@@ -1,14 +1,17 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
-assign c = '{ "errors": {}, "valid": true }' | parse_json
+assign c = { "errors": {}, "valid": true }
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret'
-function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'redirect_uri'
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'grant_type', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'code', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_id', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'client_secret', key: null
+function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'redirect_uri', key: null
-hash_assign object['valid'] = c.valid
-hash_assign object['errors'] = c.errors
+assign object.valid = c.valid
+assign object.errors = c.errors
return object
%}
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_user_info/check.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_user_info/check.liquid
index 9f6147d..dfda33e 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_user_info/check.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/commands/get_user_info/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to validate
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Accept', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'Authorization', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
\ No newline at end of file
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_redirect_url.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_redirect_url.liquid
index 8c27f48..16dee20 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_redirect_url.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_redirect_url.liquid
@@ -1,12 +1,13 @@
-{% liquid
-assign data = "{}" | parse_json
-hash_assign data['scope'] = "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid"
-hash_assign data['client_id'] = provider.client_id
-hash_assign data["state"] = state
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+ @param {string} state - The OAuth state parameter
+{% enddoc %}
+{% liquid
+assign data = { "scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid", "client_id": provider.client_id, "state": state }
assign location = "https://" | append: context.location.host | append: '/oauth/google/callback'
log location, type: "LOCATION"
-hash_assign data["redirect_uri"] = location
-hash_assign data["response_type"] = "code"
+assign data.redirect_uri = location
+assign data.response_type = "code"
assign querified_data = data | querify
assign url = "https://accounts.google.com/o/oauth2/v2/auth?" | append: querified_data
diff --git a/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_user_info.liquid b/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_user_info.liquid
index 9827969..9d0b3ad 100644
--- a/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_user_info.liquid
+++ b/pos-module-oauth-google/modules/oauth_google/public/lib/helpers/get_user_info.liquid
@@ -1,32 +1,30 @@
+{% doc %}
+ @param {object} provider - The OAuth provider configuration
+{% enddoc %}
{% liquid
# fetch token and get user data
-assign get_token_request = "{}" | parse_json
-hash_assign get_token_request["client_id"] = provider.client_id
-hash_assign get_token_request["client_secret"] = provider.secret_value
-hash_assign get_token_request["code"] = context.params.code
+assign get_token_request = { "client_id": provider.client_id, "client_secret": provider.secret_value, "code": context.params.code }
# get access token
function access_token = "modules/oauth_google/commands/get_token", data: get_token_request
assign access_token = access_token.access_token
-assign result = "{}" | parse_json
-hash_assign result["valid"] = false
+assign result = { "valid": false }
if access_token == null
return result
endif
# get user info
-assign request_data = "{}" | parse_json
-hash_assign request_data["access_token"] = access_token
+assign request_data = { "access_token": access_token }
function user_info = "modules/oauth_google/commands/get_user_info", data: request_data
-hash_assign result["first_name"] = user_info.given_name
-hash_assign result["last_name"] = user_info.family_name
-hash_assign result["sub"] = user_info.id
-hash_assign result["email"] = user_info.email
+assign result.first_name = user_info.given_name
+assign result.last_name = user_info.family_name
+assign result.sub = user_info.id
+assign result.email = user_info.email
if result.sub != null and result["email"] != null
- hash_assign result["valid"] = true
+ assign result.valid = true
endif
return result
diff --git a/pos-module-oauth-google/modules/oauth_google/template-values.json b/pos-module-oauth-google/modules/oauth_google/template-values.json
index 469024a..218fccf 100644
--- a/pos-module-oauth-google/modules/oauth_google/template-values.json
+++ b/pos-module-oauth-google/modules/oauth_google/template-values.json
@@ -2,7 +2,7 @@
"name": "pos-module-oauth-google",
"machine_name": "oauth_google",
"type": "module",
- "version": "0.0.3",
+ "version": "0.0.4",
"dependencies": {
"core": "^2.0.0"
}
diff --git a/pos-module-openai/app/lib/commands/openai/commands_to_embeddings.liquid b/pos-module-openai/app/lib/commands/openai/commands_to_embeddings.liquid
index da146b8..92d843f 100644
--- a/pos-module-openai/app/lib/commands/openai/commands_to_embeddings.liquid
+++ b/pos-module-openai/app/lib/commands/openai/commands_to_embeddings.liquid
@@ -1,13 +1,13 @@
{% liquid
- function pages = 'queries/pages/search_for_openai'
- function object = 'modules/openai/queries/embeddings/search'
+ function pages = 'queries/pages/search_for_openai', limit: null
+ function object = 'modules/openai/queries/embeddings/search', limit: null, page: null, metadata: null, related_to: null
assign existing_embeddings = object.results
- assign report = '{ "created": { "slugs": [], "count": 0 }, "updated": { "slugs": [], "count": 0 }, "errors": { "slugs": [], "count": 0 }}' | parse_json
+ assign report = { "created": { "slugs": [], "count": 0 }, "updated": { "slugs": [], "count": 0 }, "errors": { "slugs": [], "count": 0 }}
for page in pages
- hash_assign page['html_content'] = page.html_content | html_to_text
+ assign page.html_content = page.html_content | html_to_text
endfor
assign pages_chunks = pages | array_in_groups_of: 50
@@ -21,16 +21,12 @@
assign embeddings = response.data
for emb in embeddings
- assign pos_embedding_input = '{}' | parse_json
- assign metadata = '{}' | parse_json
+ assign pos_embedding_input = {}
+ assign metadata = { "slug": page_chunk[i].slug, "page": {}, "page_metadata": page_chunk[i].metadata }
- hash_assign metadata['slug'] = page_chunk[i].slug
- hash_assign metadata['page'] = '{}' | parse_json
- hash_assign metadata['page_metadata'] = page_chunk[i].metadata
-
- hash_assign pos_embedding_input['metadata'] = metadata
- hash_assign pos_embedding_input['embedding'] = emb.embedding
- hash_assign pos_embedding_input['content'] = page_chunk[i].html_content
+ assign pos_embedding_input.metadata = metadata
+ assign pos_embedding_input.embedding = emb.embedding
+ assign pos_embedding_input.content = page_chunk[i].html_content
assign found_embedding = null
@@ -42,28 +38,28 @@
endfor
if found_embedding
- hash_assign pos_embedding_input['id'] = found_embedding.id
- function pos_embedding = 'modules/openai/commands/embeddings/update', object: pos_embedding_input
+ assign pos_embedding_input.id = found_embedding.id
+ function pos_embedding = 'modules/openai/commands/embeddings/update', object: pos_embedding_input, id: null
if pos_embedding.valid
- hash_assign report['updated']['slugs'] = report['updated']['slugs'] | add_to_array: pos_embedding_input.metadata.slug
- hash_assign report['updated']['count'] = report['updated']['count'] | plus: 1
+ assign report.updated.slugs = report.updated.slugs << pos_embedding_input.metadata.slug
+ assign report.updated.count = report['updated']['count'] | plus: 1
else
assign err = "Failed to update Embedding#" | append: pos_embedding_input.id | append: ": " | append: pos_embedding.errors
- hash_assign report['errors']['slugs'] = report['errors']['slugs'] | add_to_array: pos_embedding_input.metadata.slug
- hash_assign report['errors']['count'] = report['errors']['count'] | plus: 1
+ assign report.errors.slugs = report.errors.slugs << pos_embedding_input.metadata.slug
+ assign report.errors.count = report['errors']['count'] | plus: 1
log err, type: 'ERROR'
endif
else
function pos_embedding = 'modules/openai/commands/embeddings/create', object: pos_embedding_input
if pos_embedding.valid
- hash_assign report['created']['slugs'] = report['created']['slugs'] | add_to_array: pos_embedding_input.metadata.slug
- hash_assign report['created']['count'] = report['created']['count'] | plus: 1
+ assign report.created.slugs = report.created.slugs << pos_embedding_input.metadata.slug
+ assign report.created.count = report['created']['count'] | plus: 1
else
assign err = "Failed to create Embedding: " | append: pos_embedding.errors
- hash_assign report['errors']['slugs'] = report['errors']['slugs'] | add_to_array: pos_embedding_input.metadata.slug
- hash_assign report['errors']['count'] = report['errors']['count'] | plus: 1
+ assign report.errors.slugs = report.errors.slugs << pos_embedding_input.metadata.slug
+ assign report.errors.count = report['errors']['count'] | plus: 1
log err, type: 'ERROR'
endif
endif
diff --git a/pos-module-openai/app/lib/queries/pages/search_for_openai.liquid b/pos-module-openai/app/lib/queries/pages/search_for_openai.liquid
index fd96293..5c43fcc 100644
--- a/pos-module-openai/app/lib/queries/pages/search_for_openai.liquid
+++ b/pos-module-openai/app/lib/queries/pages/search_for_openai.liquid
@@ -1,19 +1,22 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+{% enddoc %}
{% liquid
# specify slugs of pages that should not be indexed, like 404 page, static pages etc.
- assign ignored_slugs = '["404","debug","contact","disclaimer","license","search","sitemap","try-now"]' | parse_json
+ assign ignored_slugs = ["404","debug","contact","disclaimer","license","search","sitemap","try-now"]
# specify slug prefixes that should be ignored
- assign ignored_prefixes = '["release-notes","roadmap","community"]' | parse_json
+ assign ignored_prefixes = ["release-notes","roadmap","community"]
graphql r = 'pages/search_for_openai', not_slugs: ignored_slugs, limit: limit
assign all_pages = r.pages.results
- assign pages = '[]' | parse_json
+ assign pages = []
for page in all_pages
assign contains_invalid_prefix = page.slug | start_with: ignored_prefixes
unless contains_invalid_prefix
- assign pages = pages | add_to_array: page
+ assign pages << page
endunless
endfor
diff --git a/pos-module-openai/app/views/pages/openai_gpt_usage.liquid b/pos-module-openai/app/views/pages/openai_gpt_usage.liquid
index 1c91698..d12657f 100644
--- a/pos-module-openai/app/views/pages/openai_gpt_usage.liquid
+++ b/pos-module-openai/app/views/pages/openai_gpt_usage.liquid
@@ -1,7 +1,7 @@
{% comment %} CAPTCHA verification {% endcomment %}
{%- liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
- function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: context.params
+ assign c = { "errors": {}, "valid": true }
+ function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: context.params, key: 'hcaptcha'
-%}
{% comment %}
diff --git a/pos-module-openai/app/views/pages/openai_search.liquid b/pos-module-openai/app/views/pages/openai_search.liquid
index 4878be2..63dd261 100644
--- a/pos-module-openai/app/views/pages/openai_search.liquid
+++ b/pos-module-openai/app/views/pages/openai_search.liquid
@@ -9,17 +9,17 @@ metadata:
{% liquid
if context.params.query != blank and context.params.query.size < 1000
- assign c = '{ "errors": {}, "valid": true }' | parse_json
- function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: context.params
+ assign c = { "errors": {}, "valid": true }
+ function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: context.params, key: 'hcaptcha'
if c.valid
- assign user_input = '[]' | parse_json | add_to_array: context.params.query
+ assign user_input = [context.params.query]
function response = 'modules/openai/commands/openai/fetch_embeddings', object: user_input
if response.data.size > 0
assign embedding = response.data.first.embedding
- function related_embeddings = 'modules/openai/queries/embeddings/search', related_to: embedding, limit: 5
+ function related_embeddings = 'modules/openai/queries/embeddings/search', related_to: embedding, limit: 5, page: null, metadata: null
assign search_results = related_embeddings.results
else
print "Could not fetch embeddings: " | append: response
diff --git a/pos-module-openai/app/views/partials/gpt_usage_view.liquid b/pos-module-openai/app/views/partials/gpt_usage_view.liquid
index 6616032..840aa4f 100644
--- a/pos-module-openai/app/views/partials/gpt_usage_view.liquid
+++ b/pos-module-openai/app/views/partials/gpt_usage_view.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} request_object - The OpenAI API request object
+ @param {object} response_object - The OpenAI API response object
+{% enddoc %}
OpenAI GPT Examples
diff --git a/pos-module-openai/modules/core/generators/command/index.js b/pos-module-openai/modules/core/generators/command/index.js
new file mode 100644
index 0000000..29fb67e
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/command/index.js
@@ -0,0 +1,46 @@
+import Generator from 'yeoman-generator';
+import path from 'path';
+import pluralize from 'pluralize';
+import fs from 'fs';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate basic command files with build and check phase';
+ this.argument('commandName', { type: String, required: true, description: 'name of the command' });
+ this.props = {
+ commandName: this.options.commandName,
+ actionName: this.options.commandName.split('/').pop(),
+ modelName: this.options.commandName.split('/')[0]
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create.liquid'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}.liquid`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/create/'),
+ this.destinationPath(`app/lib/commands/${this.props.commandName}/`),
+ this.props
+ )
+
+ this.fs.copyTpl(
+ this.templatePath('./graphql/create.graphql'),
+ this.destinationPath(`app/graphql/${this.props.commandName}.graphql`),
+ this.props
+ )
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('Command generated');
+ }
+};
diff --git a/pos-module-openai/modules/core/generators/command/templates/graphql/create.graphql b/pos-module-openai/modules/core/generators/command/templates/graphql/create.graphql
new file mode 100644
index 0000000..0ffb1e5
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/command/templates/graphql/create.graphql
@@ -0,0 +1,20 @@
+mutation <%= actionName %>(
+ # some arguments
+ # $foo: String!
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ # { name: "foo" property: $foo }
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ # foo: (name: "foo")
+ }
+}
diff --git a/pos-module-openai/modules/core/generators/command/templates/lib/commands/create.liquid b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create.liquid
new file mode 100644
index 0000000..6d7102e
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= commandName %>/build', object: object
+ function object = 'commands/<%= commandName %>/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= commandName %>' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/build.liquid b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/build.liquid
new file mode 100644
index 0000000..1fc2591
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/build.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign data = {"id": object.id, "name": object.name}
+ return data
+%}
diff --git a/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/check.liquid b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/check.liquid
new file mode 100644
index 0000000..2c53a6c
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/command/templates/lib/commands/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/index.js b/pos-module-openai/modules/core/generators/crud/index.js
new file mode 100644
index 0000000..dd839bc
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/index.js
@@ -0,0 +1,116 @@
+import Generator from 'yeoman-generator';
+import pluralize from 'pluralize';
+import startCase from 'lodash.startcase';
+
+export default class extends Generator {
+ constructor(args, opts) {
+ super(args, opts);
+
+ this.description = 'Generate table definition and commands for CRUD with graphql files';
+ this.argument('modelName', { type: String, required: true, description: 'name of the table' });
+ this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: "[]" });
+ this.option('include-views', { type: Boolean, default: false, description: 'generate pages and partials', hide: 'no' });
+
+ const attributes = this.options.attributes.map((attr) => {
+ const values = attr.split(':');
+ return {
+ name: values[0],
+ nameHuman: startCase(values[0]),
+ type: values[1]
+ };
+ });
+ this.props = {
+ modelName: this.options.modelName,
+ modelNamePlural: pluralize(this.options.modelName),
+ attributes: attributes,
+ graphqlArgumentMap: {
+ string: "String",
+ text: "String",
+ integer: "Int",
+ boolean: "Boolean",
+ float: "Float",
+ date: "String",
+ datetime: "String",
+ array: "[String]"
+ },
+ graphqlArgumentValueMap: {
+ string: "value",
+ text: "value",
+ integer: "value_int",
+ boolean: "value_boolean",
+ float: "value_float",
+ date: "value",
+ datetime: "value",
+ array: "value_array"
+ },
+ graphqlPropertyMap: {
+ string: "property",
+ text: "property",
+ integer: "property_int",
+ boolean: "property_boolean",
+ float: "property_float",
+ date: "property",
+ datetime: "property",
+ array: "property_array"
+ }
+ };
+ }
+
+ writing() {
+ try{
+ this.fs.copyTpl(
+ this.templatePath('./translations/model.yml'),
+ this.destinationPath(`app/translations/en/${this.props.modelNamePlural}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./schema/model.yml'),
+ this.destinationPath(`app/schema/${this.props.modelName}.yml`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./graphql/*.graphql'),
+ this.destinationPath(`app/graphql/${this.props.modelNamePlural}/`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/queries/model'),
+ this.destinationPath(`app/lib/queries/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./lib/commands/model'),
+ this.destinationPath(`app/lib/commands/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./config.yml'),
+ this.destinationPath(`app/config.yml`),
+ this.props
+ )
+ if(this.options['include-views']){
+ this.fs.copyTpl(
+ this.templatePath('./views/pages/model'),
+ this.destinationPath(`app/views/pages/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/model'),
+ this.destinationPath(`app/views/partials/theme/simple/${this.props.modelNamePlural}`),
+ this.props
+ )
+ this.fs.copyTpl(
+ this.templatePath('./views/partials/theme/simple/field_error.liquid'),
+ this.destinationPath(`app/views/partials/theme/simple/field_error.liquid`),
+ this.props
+ )
+ }
+ } catch (e) {
+ console.error(e);
+ }
+ }
+
+ end() {
+ console.log('CRUD generated');
+ }
+};
diff --git a/pos-module-openai/modules/core/generators/crud/templates/config.yml b/pos-module-openai/modules/core/generators/crud/templates/config.yml
new file mode 100644
index 0000000..45cd4ce
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/config.yml
@@ -0,0 +1,16 @@
+---
+escape_output_instead_of_sanitize: true
+graphql_argument_type_mismatch_mode: 'error'
+liquid_add_old_variables: false
+liquid_check_mode: 'error'
+liquid_raise_mode: true
+require_table_for_record_delete_mutation: true
+safe_translate: true
+skip_elasticsearch: false
+slug_exact_match: true
+websockets_require_csrf_token: true
+maintenance:
+ enabled: false
+ password_constant: 'MAINTENANCE_PASSWORD'
+ partial: 'maintenance'
+---
diff --git a/pos-module-openai/modules/core/generators/crud/templates/graphql/create.graphql b/pos-module-openai/modules/core/generators/crud/templates/graphql/create.graphql
new file mode 100644
index 0000000..67905af
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/graphql/create.graphql
@@ -0,0 +1,25 @@
+mutation create_<%= modelName %>(
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>!
+<% }); -%>
+) {
+ record: record_create(
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ deleted_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/graphql/delete.graphql b/pos-module-openai/modules/core/generators/crud/templates/graphql/delete.graphql
new file mode 100644
index 0000000..c77948f
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/graphql/delete.graphql
@@ -0,0 +1,6 @@
+mutation delete($id: ID!) {
+ record: record_delete(
+ table: "<%= modelName %>"
+ id: $id
+ ){ id }
+}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/graphql/search.graphql b/pos-module-openai/modules/core/generators/crud/templates/graphql/search.graphql
new file mode 100644
index 0000000..a22b2fd
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/graphql/search.graphql
@@ -0,0 +1,39 @@
+query search(
+ $id: ID
+ $limit: Int = 20
+ $page: Int = 1
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: String
+<% }); -%>
+) {
+ <%= modelNamePlural %>: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "<%= modelName %>" }
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" value: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ sort: [
+ { created_at: { order: DESC }}
+ ]
+ ){
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/graphql/update.graphql b/pos-module-openai/modules/core/generators/crud/templates/graphql/update.graphql
new file mode 100644
index 0000000..73e4556
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/graphql/update.graphql
@@ -0,0 +1,27 @@
+mutation update_<%= modelName %>(
+ $id: ID!
+<% attributes.forEach((attr) => { -%>
+ $<%= attr.name %>: <%= graphqlArgumentMap[attr.type] %>
+<% }); -%>
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "<%= modelName %>"
+ properties: [
+ <% attributes.forEach((attr) => { -%>
+ { name: "<%= attr.name %>" <%= graphqlArgumentValueMap[attr.type] %>: $<%= attr.name %> }
+ <% }); -%>
+ ]
+ }
+ ){
+ id
+ created_at
+ updated_at
+ type: table
+
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= graphqlPropertyMap[attr.type] %>(name: "<%= attr.name %>")
+ <% }); -%>
+ }
+}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create.liquid
new file mode 100644
index 0000000..26b0a03
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/create' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
new file mode 100644
index 0000000..caf4d8d
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
@@ -0,0 +1,12 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
new file mode 100644
index 0000000..1ce0a60
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
new file mode 100644
index 0000000..4fada40
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update.liquid
new file mode 100644
index 0000000..29a229c
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update/build', object: object
+ function object = 'commands/<%= modelNamePlural %>/update/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: '<%= modelNamePlural %>/update' object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
new file mode 100644
index 0000000..94a17bf
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/build.liquid
@@ -0,0 +1,16 @@
+{% parse_json object %}
+ {
+ "id": {{ object.id | json }},
+<% attributes.forEach((attr, i) => { -%>
+ <% if (attr.type == 'integer' || attr.type == 'float') { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | plus: 0 | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <%} else { %>
+ "<%= attr.name %>": {{ object.<%= attr.name %> | json }}<% if (i+1 < attributes.length){ %>,<% } %>
+ <% } %>
+<% }); -%>
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
new file mode 100644
index 0000000..cffe564
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
@@ -0,0 +1,13 @@
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+<% attributes.forEach((attr, i) => { -%>
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
+<% }); -%>
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/find.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/find.liquid
new file mode 100644
index 0000000..7f84e12
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/find.liquid
@@ -0,0 +1,9 @@
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = '<%= modelNamePlural %>/search', id: id, limit: 1
+
+ return r.<%= modelNamePlural %>.results.first
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/search.liquid b/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/search.liquid
new file mode 100644
index 0000000..369ec37
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/lib/queries/model/search.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ graphql r = '<%= modelNamePlural %>/search', limit: limit, page: 1
+ return r.<%= modelNamePlural %>
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/schema/model.yml b/pos-module-openai/modules/core/generators/crud/templates/schema/model.yml
new file mode 100644
index 0000000..380c67b
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/schema/model.yml
@@ -0,0 +1,6 @@
+name: <%= modelName %>
+properties:
+<% attributes.forEach((attr) => { -%>
+ - name: <%= attr.name %>
+ type: <%= attr.type %>
+<% }); -%>
diff --git a/pos-module-openai/modules/core/generators/crud/templates/translations/model.yml b/pos-module-openai/modules/core/generators/crud/templates/translations/model.yml
new file mode 100644
index 0000000..879b076
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/translations/model.yml
@@ -0,0 +1,15 @@
+en:
+ app:
+ <%= modelNamePlural %>:
+ new:
+ new: New <%= modelName %>
+ edit:
+ edit: Edit <%= modelName %>
+ list:
+ add: Add <%= modelName %>
+ empty_state: You haven't added any <%= modelNamePlural %> yet.
Create your first one now!
+ edit: Edit
+ attr:
+ <% attributes.forEach((attr) => { -%>
+ <%= attr.name %>: <%= attr.nameHuman %>
+ <% }); -%>
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/create.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/create.liquid
new file mode 100644
index 0000000..cf27c95
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/create.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: post
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/create', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ endif
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/delete.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/delete.liquid
new file mode 100644
index 0000000..bb26a02
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/delete.liquid
@@ -0,0 +1,16 @@
+---
+slug: <%= modelNamePlural %>
+method: delete
+---
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+ function object = 'commands/<%= modelNamePlural %>/delete', object: object
+
+ # platformos-check-disable ConvertIncludeToRender
+ if object.valid
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', notice: 'modules/core/common.deleted'
+ else
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>', error: 'modules/core/common.delete_failed'
+ endif
+ # platformos-check-enable ConvertIncludeToRender
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/edit.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/edit.liquid
new file mode 100644
index 0000000..b098d38
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/edit.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function object = 'queries/<%= modelNamePlural %>/find', id: context.params.id
+
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/index.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/index.liquid
new file mode 100644
index 0000000..75290a7
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/index.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function <%= modelNamePlural %> = 'queries/<%= modelNamePlural %>/search', limit: 100
+
+ render 'theme/simple/<%= modelNamePlural %>/index', <%= modelNamePlural %>: <%= modelNamePlural %>
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/new.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/new.liquid
new file mode 100644
index 0000000..43c1b24
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/new.liquid
@@ -0,0 +1,4 @@
+{% liquid
+ assign object = {}
+ render 'theme/simple/<%= modelNamePlural %>/new', object: object
+ %}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/show.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/show.liquid
new file mode 100644
index 0000000..c9672cc
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/show.liquid
@@ -0,0 +1,13 @@
+---
+slug: <%= modelNamePlural %>/:id
+---
+{% liquid
+
+ assign <%= modelName %>_id = context.params.id | split: '-' | last
+ function <%= modelName %> = 'queries/<%= modelNamePlural %>/find', id: <%= modelName %>_id
+ if <%= modelName %>.id
+ render 'theme/simple/<%= modelNamePlural %>/show', <%= modelName %>: <%= modelName %>
+ else
+ response_status 404
+ endif
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/update.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/update.liquid
new file mode 100644
index 0000000..06644bd
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/pages/model/update.liquid
@@ -0,0 +1,14 @@
+---
+slug: <%= modelNamePlural %>
+method: put
+---
+{% liquid
+ function object = 'commands/<%= modelNamePlural %>/update', object: context.params.<%= modelName %>
+ if object.valid
+ # platformos-check-disable ConvertIncludeToRender
+ include 'modules/core/helpers/redirect_to', url: '/<%= modelNamePlural %>'
+ # platformos-check-enable ConvertIncludeToRender
+ else
+ render 'theme/simple/<%= modelNamePlural %>/edit', object: object
+ endif
+%}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
new file mode 100644
index 0000000..16d306b
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/field_error.liquid
@@ -0,0 +1,5 @@
+{% if errors %}
+
+ {{ errors | join: ', ' }}
+
+{% endif %}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
new file mode 100644
index 0000000..6bd91f2
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/edit.liquid
@@ -0,0 +1,5 @@
+
+
{{ 'app.<%= modelNamePlural %>.edit.edit' | t }} {{ object.name }}
+
+
+{% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
new file mode 100644
index 0000000..5abe317
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/empty_state.liquid
@@ -0,0 +1,9 @@
+
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
new file mode 100644
index 0000000..e12d1ee
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/form.liquid
@@ -0,0 +1,27 @@
+{% liquid
+ if object.id
+ assign method = 'put'
+ else
+ assign method = 'post'
+ endif
+%}
+
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
new file mode 100644
index 0000000..352f7a0
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/index.liquid
@@ -0,0 +1,49 @@
+
+
+
+ {% if <%= modelNamePlural %>.results.size > 0 %}
+
+
+
+<% attributes.forEach((attr) => { -%>
+
+ {{ "app.<%= modelNamePlural %>.attr.<%= attr.name %>" | t }}
+
+<% }); -%>
+
+
+
+ {% for <%= modelName %> in <%= modelNamePlural %>.results %}
+
+<% attributes.forEach((attr) => { -%>
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+<% }); -%>
+
+
+ {{ 'app.<%= modelNamePlural %>.list.edit' | t }}
+
+
+
+
+ {% endfor %}
+
+
+ {% else %}
+ {% render 'theme/simple/<%= modelNamePlural %>/empty_state' %}
+ {% endif %}
+
+
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
new file mode 100644
index 0000000..e15a8d4
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/new.liquid
@@ -0,0 +1,4 @@
+
+
{{ 'app.<%= modelNamePlural %>.new.new' | t }}
+ {% render 'theme/simple/<%= modelNamePlural %>/form', object: object %}
+
diff --git a/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
new file mode 100644
index 0000000..483dd89
--- /dev/null
+++ b/pos-module-openai/modules/core/generators/crud/templates/views/partials/theme/simple/model/show.liquid
@@ -0,0 +1,15 @@
+
+
+ <%= modelName %> - {{ <%= modelName %>.id }}
+
+
+ <% attributes.forEach((attr) => { -%>
+
+ {{ 'app.<%= modelNamePlural %>.attr.<%= attr.name %>' | t }}
+
+
+ {{ <%= modelName %>.<%= attr.name %> }}
+
+
+ <% }); -%>
+
diff --git a/pos-module-openai/modules/core/package-lock.json b/pos-module-openai/modules/core/package-lock.json
new file mode 100644
index 0000000..655962c
--- /dev/null
+++ b/pos-module-openai/modules/core/package-lock.json
@@ -0,0 +1,3225 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "license": "MIT",
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1"
+ }
+ },
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^13.10.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "node_modules/@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "4.2.10"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ }
+ },
+ "node_modules/@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ }
+ },
+ "node_modules/@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^16.13.0 || >=18.12.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=16.18.26",
+ "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0",
+ "mem-fs": "^3.0.0 || ^4.0.0-beta.1",
+ "mem-fs-editor": "^10.0.2 || >=10.0.2"
+ },
+ "peerDependenciesMeta": {
+ "@yeoman/adapter": {
+ "optional": true
+ },
+ "mem-fs": {
+ "optional": true
+ },
+ "mem-fs-editor": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
+ },
+ "node_modules/auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ },
+ "bin": {
+ "auto-changelog": "src/index.js"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "version-range": "^4.15.0"
+ },
+ "engines": {
+ "ecmascript": ">= es5",
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "license": "ISC"
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^10.0.1"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "license": "MIT"
+ },
+ "node_modules/isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 18.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/gjtorikian/"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "license": "MIT",
+ "dependencies": {
+ "package-json": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ },
+ "acceptDependencies": {
+ "isbinaryfile": "^5.0.3"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "mem-fs": "^4.0.0"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "license": "MIT",
+ "dependencies": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true,
+ "bin": {
+ "parse-github-url": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "license": "ISC"
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "license": "MIT",
+ "dependencies": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@pnpm/npm-conf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "rc": "1.2.8"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "license": "ISC"
+ },
+ "node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "license": "MIT",
+ "dependencies": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "node_modules/strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
+ "dependencies": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "node_modules/textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
+ "license": "Artistic-2.0",
+ "engines": {
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "license": "MIT",
+ "dependencies": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ },
+ "peerDependencies": {
+ "@types/node": ">=18.18.5",
+ "@yeoman/types": "^1.1.1",
+ "mem-fs": "^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
+ },
+ "@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "requires": {
+ "debug": "^4.1.1"
+ }
+ },
+ "@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
+ },
+ "@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "peer": true,
+ "requires": {
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "requires": {
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "requires": {
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "requires": {
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
+ }
+ },
+ "@octokit/request": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "requires": {
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "requires": {
+ "@octokit/types": "^14.0.0"
+ }
+ },
+ "@octokit/rest": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "requires": {
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "requires": {
+ "@octokit/openapi-types": "^25.1.0"
+ }
+ },
+ "@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="
+ },
+ "@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "requires": {
+ "graceful-fs": "4.2.10"
+ }
+ },
+ "@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "requires": {
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
+ }
+ },
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
+ },
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
+ },
+ "@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
+ },
+ "@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "peer": true,
+ "requires": {
+ "undici-types": "~7.16.0"
+ }
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
+ },
+ "@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "requires": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA=="
+ },
+ "@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "peer": true,
+ "requires": {}
+ },
+ "array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="
+ },
+ "array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
+ },
+ "async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="
+ },
+ "auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "requires": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ }
+ },
+ "b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "requires": {}
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "requires": {}
+ },
+ "before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+ },
+ "binaryextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "requires": {
+ "fill-range": "^7.1.1"
+ }
+ },
+ "chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+ },
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+ },
+ "editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "requires": {
+ "version-range": "^4.15.0"
+ }
+ },
+ "ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "requires": {
+ "jake": "^10.8.5"
+ }
+ },
+ "events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "requires": {
+ "bare-events": "^2.7.0"
+ }
+ },
+ "execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ }
+ },
+ "fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
+ },
+ "fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ }
+ },
+ "fastq": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "requires": {
+ "minimatch": "^5.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="
+ },
+ "first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ=="
+ },
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ },
+ "github-username": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "requires": {
+ "@octokit/rest": "^21.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "requires": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "requires": {
+ "lru-cache": "^10.0.1"
+ }
+ },
+ "human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
+ },
+ "ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="
+ },
+ "index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
+ },
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
+ },
+ "isbinaryfile": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "requires": {
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="
+ },
+ "latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "requires": {
+ "package-json": "^10.0.0"
+ }
+ },
+ "lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
+ },
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+ },
+ "mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "peer": true,
+ "requires": {
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
+ }
+ },
+ "mem-fs-editor": {
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "peer": true,
+ "requires": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
+ "commondir": "^1.0.1",
+ "deep-extend": "^0.6.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
+ "normalize-path": "^3.0.0",
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "requires": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "requires": {
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dev": true,
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "requires": {
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "requires": {
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
+ }
+ },
+ "onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "requires": {
+ "mimic-fn": "^4.0.0"
+ }
+ },
+ "package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "requires": {
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
+ }
+ },
+ "parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "requires": {
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "requires": {
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
+ }
+ },
+ "read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "requires": {
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "dependencies": {
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "requires": {
+ "@pnpm/npm-conf": "^3.0.2"
+ }
+ },
+ "registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "requires": {
+ "rc": "1.2.8"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
+ },
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
+ },
+ "reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
+ },
+ "simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "requires": {
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
+ }
+ },
+ "slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
+ },
+ "sort-keys": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "requires": {
+ "is-plain-obj": "^4.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="
+ },
+ "streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "requires": {
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
+ }
+ },
+ "strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "requires": {
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "requires": {
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
+ }
+ },
+ "strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ },
+ "teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "requires": {
+ "streamx": "^2.12.5"
+ }
+ },
+ "text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "requires": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "textextensions": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
+ "undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
+ },
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
+ },
+ "universal-user-agent": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg=="
+ },
+ "vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "requires": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ }
+ },
+ "vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "requires": {
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "yeoman-generator": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "peer": true,
+ "requires": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
+ "debug": "^4.1.1",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
+ "text-table": "^0.2.0"
+ }
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/package.json b/pos-module-openai/modules/core/package.json
new file mode 100644
index 0000000..49515a0
--- /dev/null
+++ b/pos-module-openai/modules/core/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "pos-module-core",
+ "version": "1.2.1",
+ "description": "Module description",
+ "type": "module",
+ "scripts": {
+ "version": "(cd ../../ && pos-cli modules version core -p) && git add template-values.json && auto-changelog -p && git add CHANGELOG.md"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Platform-OS/pos-module-core.git"
+ },
+ "author": "",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Platform-OS/pos-module-core/issues"
+ },
+ "homepage": "https://github.com/Platform-OS/pos-module-core#readme",
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ },
+ "devDependencies": {
+ "auto-changelog": "^2.4.0",
+ "lodash.startcase": "^4.4.0",
+ "pluralize": "^8.0.0"
+ },
+ "auto-changelog": {
+ "template": "changelog-template.hbs",
+ "unreleased": true,
+ "commitLimit": false
+ }
+}
diff --git a/pos-module-openai/modules/core/public/api_calls/generic.liquid b/pos-module-openai/modules/core/public/api_calls/generic.liquid
new file mode 100644
index 0000000..0a3289b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/api_calls/generic.liquid
@@ -0,0 +1,6 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{{ data.payload }}
diff --git a/pos-module-openai/modules/core/public/api_calls/generic_x_form_encoded.liquid b/pos-module-openai/modules/core/public/api_calls/generic_x_form_encoded.liquid
new file mode 100644
index 0000000..4085222
--- /dev/null
+++ b/pos-module-openai/modules/core/public/api_calls/generic_x_form_encoded.liquid
@@ -0,0 +1,10 @@
+---
+request_type: "{{ data.request_type }}"
+request_headers: '{{ data.headers | json }}'
+to: "{{ data.to }}"
+---
+{% liquid
+ function url = 'modules/core/helpers/hash_to_x_form_encoded', payload: data.payload
+ print url
+%}
+
diff --git a/pos-module-openai/modules/core/public/emails/.keep b/pos-module-openai/modules/core/public/emails/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/emails/generic.liquid b/pos-module-openai/modules/core/public/emails/generic.liquid
new file mode 100644
index 0000000..240ce94
--- /dev/null
+++ b/pos-module-openai/modules/core/public/emails/generic.liquid
@@ -0,0 +1,13 @@
+---
+from: "{{ data.from }}"
+layout: "{{ data.layout }}"
+to: "{{ data.to }}"
+cc: "{{ data.cc }}"
+bcc: "{{ data.bcc }}"
+subject: "{{ data.subject }}"
+---
+{% liquid
+ # platformos-check-disable
+ include data.partial, data: data.data
+ # platformos-check-enable
+%}
diff --git a/pos-module-openai/modules/core/public/graphql/.keep b/pos-module-openai/modules/core/public/graphql/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/graphql/api_calls/send.graphql b/pos-module-openai/modules/core/public/graphql/api_calls/send.graphql
new file mode 100644
index 0000000..b26d03f
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/api_calls/send.graphql
@@ -0,0 +1,12 @@
+mutation ($template: String!, $data: HashObject!, $options: ApiCallSendOptions) {
+ api_call: api_call_send(
+ data: $data
+ template: { name: $template }
+ options: $options
+ ) {
+ response{ status body }
+ errors {
+ message
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/email/send.graphql b/pos-module-openai/modules/core/public/graphql/email/send.graphql
new file mode 100644
index 0000000..2f9fc39
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/email/send.graphql
@@ -0,0 +1,9 @@
+mutation ($data: HashObject!, $template: String!){
+ email_send(
+ template: { name: $template }
+ data: $data
+ ){
+ is_scheduled_to_send
+ errors { message }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/events/consumers.graphql b/pos-module-openai/modules/core/public/graphql/events/consumers.graphql
new file mode 100644
index 0000000..b13d23b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/events/consumers.graphql
@@ -0,0 +1,15 @@
+query consumers($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { contains: $name }
+ }
+ sort: {
+ path: { order: ASC }
+ }
+ ) {
+ results {
+ path
+ metadata
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/events/create.graphql b/pos-module-openai/modules/core/public/graphql/events/create.graphql
new file mode 100644
index 0000000..77bc1d9
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/events/create.graphql
@@ -0,0 +1,7 @@
+mutation create_event($payload: ActivityStreamsPayload!) {
+ activity_create(
+ payload: $payload
+ ) {
+ payload
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/events/events_checks.graphql b/pos-module-openai/modules/core/public/graphql/events/events_checks.graphql
new file mode 100644
index 0000000..c326d87
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/events/events_checks.graphql
@@ -0,0 +1,11 @@
+query events_checks($name: String) {
+ admin_liquid_partials(
+ filter: {
+ path: { ends_with: $name }
+ }
+ ) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/events/search.graphql b/pos-module-openai/modules/core/public/graphql/events/search.graphql
new file mode 100644
index 0000000..4e78dd2
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/events/search.graphql
@@ -0,0 +1,14 @@
+query ac($limit: Int = 100 $page: Int = 1 $uuids: [String!]) {
+ activities: activities(
+ per_page: $limit,
+ page: $page
+ uuids: $uuids
+ sort: { created_at: { order: DESC } }
+ ){
+ total_entries
+ total_pages
+ results {
+ payload
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/hook/search.graphql b/pos-module-openai/modules/core/public/graphql/hook/search.graphql
new file mode 100644
index 0000000..37e31e2
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/hook/search.graphql
@@ -0,0 +1,7 @@
+query ($hook: String) {
+ admin_liquid_partials(filter: { path: { ends_with: $hook } }) {
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/records/count.graphql b/pos-module-openai/modules/core/public/graphql/records/count.graphql
new file mode 100644
index 0000000..9a21894
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/records/count.graphql
@@ -0,0 +1,26 @@
+query records_count(
+ $property_name: String!
+ $property_value: String!
+ $scope_name: String!
+ $scope_value: String
+ $table: String!
+ $not_ids: [ID!]
+ $ids: [ID!]
+ $exclude_name: String!
+ $exclude_value: String
+) {
+ records(
+ per_page: 1
+ filter: {
+ id: { not_value_in: $not_ids, value_in: $ids }
+ table: { value: $table }
+ properties: [
+ { name: $property_name, value: $property_value }
+ { name: $scope_name, value: $scope_value }
+ { name: $exclude_name, not_value: $exclude_value }
+ ]
+ }
+ ) {
+ total_entries
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/session/delete.graphql b/pos-module-openai/modules/core/public/graphql/session/delete.graphql
new file mode 100644
index 0000000..c83de59
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/session/delete.graphql
@@ -0,0 +1,5 @@
+mutation ($name: String!){
+ session_delete_field(
+ name: $name
+ )
+}
diff --git a/pos-module-openai/modules/core/public/graphql/session/set.graphql b/pos-module-openai/modules/core/public/graphql/session/set.graphql
new file mode 100644
index 0000000..9069f25
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/session/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: Any!){
+ session_create_field(
+ name: $name
+ value: $value
+ )
+}
diff --git a/pos-module-openai/modules/core/public/graphql/statuses/create.graphql b/pos-module-openai/modules/core/public/graphql/statuses/create.graphql
new file mode 100644
index 0000000..7274afc
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/statuses/create.graphql
@@ -0,0 +1,34 @@
+mutation create_status(
+ $name: String!
+ $timestamp: String!
+ $reference_id: String!
+ $reference_schema: String
+ $payload: String
+ $requester_id: String!
+) {
+ record: record_create(
+ record: {
+ table: "modules/core/status"
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "payload", value: $payload }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ ) {
+ id
+ created_at
+ deleted_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/statuses/delete.graphql b/pos-module-openai/modules/core/public/graphql/statuses/delete.graphql
new file mode 100644
index 0000000..fb333ab
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/statuses/delete.graphql
@@ -0,0 +1,5 @@
+mutation delete_status($id: ID!) {
+ record_delete(table: "modules/core/status", id: $id) {
+ id
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/statuses/search.graphql b/pos-module-openai/modules/core/public/graphql/statuses/search.graphql
new file mode 100644
index 0000000..8beffdc
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/statuses/search.graphql
@@ -0,0 +1,45 @@
+query search(
+ $id: ID
+ $limit: Int!
+ $page: Int!
+ $name: String
+ $timestamp: String
+ $reference_id: String
+ $reference_schema: String
+ $requester_id: String
+) {
+ statuses: records(
+ per_page: $limit
+ page: $page
+ filter: {
+ id: { value: $id }
+ table: { value: "modules/core/status" }
+ properties: [
+ { name: "name", value: $name }
+ { name: "timestamp", value: $timestamp }
+ { name: "reference_id", value: $reference_id }
+ { name: "reference_schema", value: $reference_schema }
+ { name: "requester_id", value: $requester_id }
+ ]
+ }
+ sort: [{ created_at: { order: DESC } }]
+ ) {
+ total_entries
+ has_next_page
+ has_previous_page
+ current_page
+
+ results {
+ id
+ created_at
+ type: table
+
+ name: property(name: "name")
+ timestamp: property(name: "timestamp")
+ reference_id: property(name: "reference_id")
+ reference_schema: property(name: "reference_schema")
+ payload: property(name: "payload")
+ requester_id: property(name: "requester_id")
+ }
+ }
+}
diff --git a/pos-module-openai/modules/core/public/graphql/variable/set.graphql b/pos-module-openai/modules/core/public/graphql/variable/set.graphql
new file mode 100644
index 0000000..3c7b0d9
--- /dev/null
+++ b/pos-module-openai/modules/core/public/graphql/variable/set.graphql
@@ -0,0 +1,6 @@
+mutation ($name: String!, $value: String!) {
+ variable: constant_set(name: $name, value: $value) {
+ name
+ value
+ }
+}
diff --git a/pos-module-openai/modules/core/public/lib/commands/.keep b/pos-module-openai/modules/core/public/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/lib/commands/email/send.liquid b/pos-module-openai/modules/core/public/lib/commands/email/send.liquid
new file mode 100644
index 0000000..1fc5273
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/email/send.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/email/send/build.liquid b/pos-module-openai/modules/core/public/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-openai/modules/core/public/lib/commands/email/send/check.liquid b/pos-module-openai/modules/core/public/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/broadcast.liquid b/pos-module-openai/modules/core/public/lib/commands/events/broadcast.liquid
new file mode 100644
index 0000000..ec2b6bd
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/broadcast.liquid
@@ -0,0 +1,29 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ if object.type == blank
+ log 'ERROR: events broadcast type blank'
+ return null
+ endif
+ assign priorities = 'low,default,high' | split: ','
+
+ assign name = 'consumers/' | append: object.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+
+ assign object.consumers = consumers
+ for consumer in consumers
+ assign priority = 'default'
+ if priorities contains consumer.metadata.priority
+ assign priority = consumer.metadata.priority
+ endif
+ assign max_attempts = consumer.metadata.max_attempts | default: deprecated_max_attempts | default: 9
+ assign delay = consumer.metadata.delay | default: deprecated_delay | default: 0
+
+ background _id = consumer.path, event: object, priority: priority, delay: delay, max_attempts: max_attempts
+ endfor
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/create.liquid b/pos-module-openai/modules/core/public/lib/commands/events/create.liquid
new file mode 100644
index 0000000..c32c970
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/create.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
+{% liquid
+ function event = 'modules/core/commands/events/create/build', type: type, object: object
+ function event = 'modules/core/commands/events/create/check', object: event, type: type
+ if event.valid
+ function event = 'modules/core/commands/events/create/execute', object: event
+ if event.valid
+ assign source_name = 'modules/core/commands/events/create:' | append: type
+ background _job_id = 'modules/core/commands/events/broadcast', object: event, deprecated_max_attempts: deprecated_max_attempts, deprecated_delay: deprecated_delay, source_name: source_name, priority: 'high'
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+ else
+ log event, type: 'ERROR: modules/core/commands/events invalid'
+ endif
+
+ return event
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/create/build.liquid b/pos-module-openai/modules/core/public/lib/commands/events/create/build.liquid
new file mode 100644
index 0000000..32e10ed
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/create/build.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign now = 'now' | to_time
+ assign data = object
+ assign data.type = type
+ assign data.date = now
+
+ return data
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/create/check.liquid b/pos-module-openai/modules/core/public/lib/commands/events/create/check.liquid
new file mode 100644
index 0000000..a11a644
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/create/check.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date', key: null
+
+ assign name = 'events/' | append: object.type
+ graphql event_check_partials = 'modules/core/events/events_checks', name: name | dig: "admin_liquid_partials", "results"
+ for partial in event_check_partials
+ assign is_event_definition = partial.path | matches: '^(modules/[^/]+/events/[^/]++|events/[^/]+)$'
+ if is_event_definition
+ assign event_check_partial = partial
+ break
+ endif
+ endfor
+
+ if event_check_partial
+ function event_result = event_check_partial.path, event: object
+ if event_result.valid != true
+ assign c.errors.object = event_result.errors
+ assign c.valid = false
+ endif
+ else
+ assign message = 'There is no such event: ' | append: object.type | append: '. Please add event check in events/' | append: object.type
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message, key: null
+ endif
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+ return object
+ %}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/create/execute.liquid b/pos-module-openai/modules/core/public/lib/commands/events/create/execute.liquid
new file mode 100644
index 0000000..d94fff4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/create/execute.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ graphql r = 'modules/core/events/create', payload: object
+
+ assign object = r.activity_create.payload
+ assign object.valid = true
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/events/publish.liquid b/pos-module-openai/modules/core/public/lib/commands/events/publish.liquid
new file mode 100644
index 0000000..586ad27
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/events/publish.liquid
@@ -0,0 +1,27 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+{% enddoc %}
+{% liquid
+ if delay > 0
+ log 'use metadata.delay in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+ if max_attempts
+ log 'use metadata.max_attempts in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
+ endif
+
+ unless type
+ log 'type is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+ unless object
+ log 'object is required', type: 'ERROR: modules/core/commands/events publish'
+ return null
+ endunless
+
+ function event = "modules/core/commands/events/create", type: type, object: object, deprecated_max_attempts: max_attempts, deprecated_delay: delay
+
+ return event
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/execute.liquid b/pos-module-openai/modules/core/public/lib/commands/execute.liquid
new file mode 100644
index 0000000..e0510a4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/execute.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} mutation_name - The GraphQL mutation name
+ @param {object} object - The object to process
+ @param {string} selection - The GraphQL result selection key
+{% enddoc %}
+{% liquid
+ assign selection = selection | default: 'record'
+
+ graphql r = mutation_name, args: object
+ if r.errors
+ log r, type: "ERROR: modules/core/commands/execute"
+ endif
+
+ assign object = r[selection]
+ assign object.valid = true
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/hook/alter.liquid b/pos-module-openai/modules/core/public/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..19f42fb
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/hook/alter.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/hook/fire.liquid b/pos-module-openai/modules/core/public/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..0b35c38
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/session/clear.liquid b/pos-module-openai/modules/core/public/lib/commands/session/clear.liquid
new file mode 100644
index 0000000..b823fa5
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/session/clear.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ graphql _ = 'modules/core/session/delete', name: key
+ return true
+ endif
+ return false
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/session/get.liquid b/pos-module-openai/modules/core/public/lib/commands/session/get.liquid
new file mode 100644
index 0000000..02b8240
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/session/get.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {boolean} clear - If true, clear the session value after reading
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if context.session[key] != blank
+ assign value = context.session[key] | parse_json
+ if clear
+ graphql _ = 'modules/core/session/delete', name: key
+ endif
+
+ return value
+ endif
+ return null
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/session/set.liquid b/pos-module-openai/modules/core/public/lib/commands/session/set.liquid
new file mode 100644
index 0000000..3441120
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/session/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | json
+ graphql _ = 'modules/core/session/set', name: key, value: value
+ return true
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/create.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/create.liquid
new file mode 100644
index 0000000..dc5f46d
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/create.liquid
@@ -0,0 +1,25 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/create/build', name: name, timestamp: timestamp, reference_id: reference_id, reference_schema: reference_schema, payload: payload, requester_id: requester_id
+ function object = 'modules/core/commands/statuses/create/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object, selection: null
+ if object.valid
+ function _ = 'modules/core/commands/events/publish', type: 'status_created', object: object, delay: delay, max_attempts: max_attempts
+ endif
+ else
+ log object, 'showme STATUS-INVALID'
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/create/build.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/create/build.liquid
new file mode 100644
index 0000000..b46956a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/create/build.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% parse_json object %}
+ {
+ "name": {{ name | json }},
+ "timestamp": {{ timestamp | default: 'now' | to_time | json }},
+ "reference_id": {{ reference_id | json }},
+ "reference_schema": {{ reference_schema | json }},
+ "payload": {{ payload | json }},
+ "requester_id": {{ requester_id | json }}
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/create/check.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/create/check.liquid
new file mode 100644
index 0000000..61a2d21
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/create/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/delete.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/delete.liquid
new file mode 100644
index 0000000..5c79d78
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/delete.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ function object = 'modules/core/commands/statuses/delete/build', id: id
+ function object = 'modules/core/commands/statuses/delete/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/delete', selection: 'record_delete', object: object
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/delete/build.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/delete/build.liquid
new file mode 100644
index 0000000..29c1322
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/delete/build.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ assign object = {"id": id}
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/lib/commands/statuses/delete/check.liquid b/pos-module-openai/modules/core/public/lib/commands/statuses/delete/check.liquid
new file mode 100644
index 0000000..737a3fd
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/statuses/delete/check.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "valid": true, "errors": {} }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-openai/modules/core/public/lib/commands/variable/set.liquid b/pos-module-openai/modules/core/public/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..cdbc3b8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/commands/variable/set.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-openai/modules/core/public/lib/events/status_created.liquid b/pos-module-openai/modules/core/public/lib/events/status_created.liquid
new file mode 100644
index 0000000..02541f7
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/events/status_created.liquid
@@ -0,0 +1,21 @@
+---
+metadata:
+ event:
+ name
+ reference_id
+ reference_schema
+ requester_id
+ payload
+---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id', key: null
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/authenticity_token.liquid b/pos-module-openai/modules/core/public/lib/helpers/authenticity_token.liquid
new file mode 100644
index 0000000..6262ed4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/authenticity_token.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} authenticity_token - The authenticity token from the form
+ @param {string} token - The authenticity token value
+{% enddoc %}
+{% assign token = token | default: authenticity_token | default: context.authenticity_token %}
+{% unless token %}
+
Liquid Error AuthenticityTokenNotFound
+{% endunless %}
+
diff --git a/pos-module-openai/modules/core/public/lib/helpers/flash/publish.liquid b/pos-module-openai/modules/core/public/lib/helpers/flash/publish.liquid
new file mode 100644
index 0000000..cd5847d
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/flash/publish.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+{% enddoc %}
+{% liquid
+ if error and error contains 'app.'
+ assign error = error | t
+ endif
+
+ if notice and notice contains 'app.'
+ assign notice = notice | t
+ endif
+
+ if info and info contains 'app.'
+ assign info = info | t
+ endif
+%}
+
+{% parse_json flash %}
+ {
+ "error": {{ error | json }},
+ "notice": {{ notice | json }},
+ "info": {{ info | json }},
+ "from": {{ context.location.pathname | json }},
+ "now": {{ force_clear | default: false }}
+ }
+{% endparse_json %}
+
+{% liquid
+ assign sflash = flash | json
+ session sflash = sflash
+%}
+
diff --git a/pos-module-openai/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid b/pos-module-openai/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
new file mode 100644
index 0000000..05d1820
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {object} payload - The payload data
+{% enddoc %}
+{% liquid
+ assign parameters = '' | split: ','
+ for pair in payload
+ assign component = pair[0] | append: '={' | append: pair[0] | append: '}'
+ assign parameters << component
+ endfor
+ if parameters.size > 0
+ assign x_form_encoded = parameters | join: '&' | expand_url_template: payload
+ else
+ assign x_form_encoded = ''
+ endif
+
+ return x_form_encoded
+%}
+
diff --git a/pos-module-openai/modules/core/public/lib/helpers/log_time.liquid b/pos-module-openai/modules/core/public/lib/helpers/log_time.liquid
new file mode 100644
index 0000000..447397a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/log_time.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {string} _start - The start time for measuring elapsed time
+ @param {string} type - The type identifier
+ @param {string} env - The environment name for logging
+{% enddoc %}
+{% liquid
+ assign _stop = 'now' | to_time
+ assign _diff = _start | time_diff: _stop
+ if env
+ log _diff, type: type, env: env
+ else
+ log _diff, type: type
+ endif
+
+ return true
+%}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/redirect_to.liquid b/pos-module-openai/modules/core/public/lib/helpers/redirect_to.liquid
new file mode 100644
index 0000000..8f14d81
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/redirect_to.liquid
@@ -0,0 +1,50 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {object} object - The object to process
+ @param {string} default - The default value
+ @param {string} format - The response format
+ @param {string} url - The URL to redirect to
+{% enddoc %}
+{% liquid
+ if url == blank and context.session.return_to != blank
+ assign url = context.session.return_to
+ session return_to = null
+ endif
+
+ if context.params.return_to != blank or context.params.redirect_to != blank and url == blank
+ assign url = context.params.return_to | default: context.params.redirect_to | url_decode
+ assign not_start_with_slash = url | matches: '^(?!\/)(.+)'
+
+ # for security reasons, we do not allow redirecting to external URLs based on unsafe user input
+ assign wrong_url = url | matches: '^\/\/'
+ if not_start_with_slash or wrong_url
+ assign url = '/'
+ endif
+ else
+ assign default = default | default: '/'
+ assign url = url | default: default
+ endif
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info, force_clear: null
+ # platformos-check-enable DeprecatedTag
+
+ if format == 'json'
+ assign response_json = {"type": "redirect", "url": url}
+ if object.valid
+ echo response_json
+ else
+ response_status 422
+ assign res = { "errors": response_json.errors }
+
+ echo res
+ endif
+
+ else
+ redirect_to url
+ endif
+
+ break
+%}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/register_error.liquid b/pos-module-openai/modules/core/public/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/timezone/get_all.liquid b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_all.liquid
new file mode 100644
index 0000000..7ed01d5
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_all.liquid
@@ -0,0 +1,18 @@
+{% comment %}
+ we need the to_json | parse_json hack because time_zones.all is an array of TimeZoneDrop (not an object)
+ this prevents us from using array filters or pass the timezone as reference (return it from a function, etc)
+ should be fixed on the platform level
+{% endcomment %}
+{% comment %}
+Returns an array of timezone objects in the following format:
+{
+ "formatted_name":"(GMT-12:00) International Date Line West",
+ "formatted_offset":"-12:00",
+ "name":"International Date Line West",
+ "utc_offset":-43200,
+ "abbreviation":"-12",
+ "friendly_name_with_region":"Etc - GMT+12",
+ "friendly_name_without_region":"GMT+12"
+}
+{% endcomment %}
+{% return context.globals.time_zones.all | parse_json %}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_name.liquid b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_name.liquid
new file mode 100644
index 0000000..20f429d
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_name.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: name: name
+
+ return timezone
+%}
diff --git a/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_offset.liquid b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
new file mode 100644
index 0000000..478d3ae
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {number} offset
+{% enddoc %}
+{% liquid
+ function timezones = 'modules/core/helpers/timezone/get_all'
+ assign timezone = timezones | array_detect: formatted_offset: offset
+
+ return timezone
+%}
diff --git a/pos-module-openai/modules/core/public/lib/hooks/.keep b/pos-module-openai/modules/core/public/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/lib/queries/.keep b/pos-module-openai/modules/core/public/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/lib/queries/constants/find.liquid b/pos-module-openai/modules/core/public/lib/queries/constants/find.liquid
new file mode 100644
index 0000000..84fe8d8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/constants/find.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% if context.constants %}
+ {% assign value = context.constants[name] %}
+{% else %}
+ {% graphql r, name: name %}
+ query get_constant($name: String!) {
+ constant(filter: { name: $name }) {
+ name
+ value
+ }
+ }
+ {% endgraphql %}
+ {% assign value = r.constant.value %}
+{% endif %}
+
+{% liquid
+ case type
+ when "boolean"
+ if value == "true"
+ return true
+ else
+ return false
+ endif
+ when "integer"
+ assign value = value | plus: 0
+ return value
+ when "array"
+ assign value = value | split: ','
+ return value
+ when "time"
+ return value | to_time
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/events/find.liquid b/pos-module-openai/modules/core/public/lib/queries/events/find.liquid
new file mode 100644
index 0000000..c3d264a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/events/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ if uuid == blank
+ return null
+ endif
+
+ function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid, page: null
+
+ return events.results.first.payload
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/events/search.liquid b/pos-module-openai/modules/core/public/lib/queries/events/search.liquid
new file mode 100644
index 0000000..2569598
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/events/search.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} uuids - List of UUID identifiers
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign uuids = uuids | default: null
+
+ graphql r = 'modules/core/events/search', limit: limit, page: page, uuids: uuids
+
+ assign events = r.activities
+
+ return events
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/headscripts/get.liquid b/pos-module-openai/modules/core/public/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..e2453ef
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/headscripts/get.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/headscripts/search', merge_to_object: null
+ return res
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/headscripts/search.liquid b/pos-module-openai/modules/core/public/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..989f536
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/headscripts/search.liquid
@@ -0,0 +1,5 @@
+{% liquid
+ function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/hook/search.liquid b/pos-module-openai/modules/core/public/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..5b49f62
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/hook/search.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/module/exists.liquid b/pos-module-openai/modules/core/public/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..474665d
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/registry/get.liquid b/pos-module-openai/modules/core/public/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..aa3524a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/registry/search.liquid b/pos-module-openai/modules/core/public/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..96116a4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/statuses/find.liquid b/pos-module-openai/modules/core/public/lib/queries/statuses/find.liquid
new file mode 100644
index 0000000..b7cf078
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/statuses/find.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = 'modules/core/statuses/search', id: id, limit: 1, page: 1
+
+ return r.statuses.results.first
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/statuses/search.liquid b/pos-module-openai/modules/core/public/lib/queries/statuses/search.liquid
new file mode 100644
index 0000000..f4f79d8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/statuses/search.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} name - The name identifier
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ assign limit = limit | default: 20
+
+ graphql r = 'modules/core/statuses/search', limit: limit, page: page, id: id, name: name, reference_id: reference_id, requester_id: requester_id, reference_schema: reference_schema, timestamp: timestamp
+
+ return r.statuses
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/variable/find.liquid b/pos-module-openai/modules/core/public/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-openai/modules/core/public/lib/queries/variable/get.liquid b/pos-module-openai/modules/core/public/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..e51e5de
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/date.liquid b/pos-module-openai/modules/core/public/lib/validations/date.liquid
new file mode 100644
index 0000000..7125e98
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/date.liquid
@@ -0,0 +1,78 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/each_element_length.liquid b/pos-module-openai/modules/core/public/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..85f5315
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/elements_included.liquid b/pos-module-openai/modules/core/public/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..6b58bde
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/elements_included.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-openai/modules/core/public/lib/validations/email.liquid b/pos-module-openai/modules/core/public/lib/validations/email.liquid
new file mode 100644
index 0000000..39c8029
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/email.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/equal.liquid b/pos-module-openai/modules/core/public/lib/validations/equal.liquid
new file mode 100644
index 0000000..6b367e4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/equal.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/exist_in_db.liquid b/pos-module-openai/modules/core/public/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..abc8a51
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/exist_in_db.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/hcaptcha.liquid b/pos-module-openai/modules/core/public/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..21289c9
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/hcaptcha.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/included.liquid b/pos-module-openai/modules/core/public/lib/validations/included.liquid
new file mode 100644
index 0000000..a432b8c
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/included.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-openai/modules/core/public/lib/validations/is_url.liquid b/pos-module-openai/modules/core/public/lib/validations/is_url.liquid
new file mode 100644
index 0000000..8ffaa46
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/is_url.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} url - The URL to redirect to
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.not_url'
+ assign is_url = url | matches: '^https?:\/\/[\S]+'
+
+ if is_url != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
\ No newline at end of file
diff --git a/pos-module-openai/modules/core/public/lib/validations/length.liquid b/pos-module-openai/modules/core/public/lib/validations/length.liquid
new file mode 100644
index 0000000..fba5e45
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/length.liquid
@@ -0,0 +1,44 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name, key: null
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/matches.liquid b/pos-module-openai/modules/core/public/lib/validations/matches.liquid
new file mode 100644
index 0000000..19a1c8a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/matches.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/not_null.liquid b/pos-module-openai/modules/core/public/lib/validations/not_null.liquid
new file mode 100644
index 0000000..810b5f8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/not_null.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/number.liquid b/pos-module-openai/modules/core/public/lib/validations/number.liquid
new file mode 100644
index 0000000..d39591f
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/number.liquid
@@ -0,0 +1,69 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/password_complexity.liquid b/pos-module-openai/modules/core/public/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..634daa6
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/password_complexity.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+ @param {string} field_name - The name of the field to validate
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ assign decoded_pw = object.password
+ assign minimum = minimum | default: 6
+ assign maximum = maximum | default: 256
+ assign field_name = field_name | default: 'password'
+
+ function complex_password = 'modules/core/queries/variable/find', name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: message_minimum, allow_blank: null, is: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/presence.liquid b/pos-module-openai/modules/core/public/lib/validations/presence.liquid
new file mode 100644
index 0000000..6526d2b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/presence.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/truthy.liquid b/pos-module-openai/modules/core/public/lib/validations/truthy.liquid
new file mode 100644
index 0000000..86b428e
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/truthy.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/unique_elements.liquid b/pos-module-openai/modules/core/public/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..4bca1e8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/uniqueness.liquid b/pos-module-openai/modules/core/public/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..76a9948
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/uniqueness.liquid
@@ -0,0 +1,37 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/lib/validations/valid_object.liquid b/pos-module-openai/modules/core/public/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..6693ec3
--- /dev/null
+++ b/pos-module-openai/modules/core/public/lib/validations/valid_object.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/schema/status.yml b/pos-module-openai/modules/core/public/schema/status.yml
new file mode 100644
index 0000000..5a8a0de
--- /dev/null
+++ b/pos-module-openai/modules/core/public/schema/status.yml
@@ -0,0 +1,14 @@
+name: status
+properties:
+ - name: name
+ type: string
+ - name: timestamp
+ type: datetime
+ - name: reference_id
+ type: string
+ - name: reference_schema
+ type: string
+ - name: payload
+ type: string
+ - name: requester_id
+ type: string
diff --git a/pos-module-openai/modules/core/public/translations/en/common.yml b/pos-module-openai/modules/core/public/translations/en/common.yml
new file mode 100644
index 0000000..19ed613
--- /dev/null
+++ b/pos-module-openai/modules/core/public/translations/en/common.yml
@@ -0,0 +1,4 @@
+en:
+ common:
+ deleted: 'Deleted'
+ deleted_failed: 'Deleted failed'
diff --git a/pos-module-openai/modules/core/public/translations/en/validation.yml b/pos-module-openai/modules/core/public/translations/en/validation.yml
new file mode 100644
index 0000000..06a1a48
--- /dev/null
+++ b/pos-module-openai/modules/core/public/translations/en/validation.yml
@@ -0,0 +1,50 @@
+---
+en:
+ validation:
+ disallowed: is not valid
+ not_url: is not valid url
+ blank: cannot be blank
+ email: must be a valid email
+ equal: expected %{given} to equal %{expected}
+ equal_not_verbose: does not match
+ array:
+ not_included: '`%{value}` is not a valid value'
+ not_unique: elements must be unique
+ hcaptcha: Captcha has not been solved properly, please try again
+ length:
+ minimum: is too short (minimum is %{count} characters)
+ maximum: is too long (maximum is %{count} characters)
+ is: is the wrong length (should be %{count} characters)
+ blank: is blank
+ number:
+ invalid: '`%{value}` is not a number'
+ greater_than: must be greater than %{count}
+ greater_than_or_equal: must be greater than or equal to %{count}
+ less_than: must be less than %{count}
+ less_than_or_equal: must be less than or equal to %{count}
+ equal_to: must be equal to %{count}
+ gt: must be greater than %{count}
+ gte: must be greater than or equal to %{count}
+ lt: must be less than %{count}
+ lte: must be less than or equal to %{count}
+ eq: must be equal to %{count}
+ ne: must be not equal to %{count}
+ date:
+ can_be_past: The date cannot be in the past
+ can_be_future: The date cannot be in the future
+ lt: must be before %{date}
+ lte: must be before %{date}
+ gt: must be after %{date}
+ gte: must be after or equal to %{date}
+ too_short: has to be longer than %{value} characters
+ taken: already taken
+ not_uniq: not unique
+ matches: not valid format
+ not_truthy: not true
+ not_null: not null
+ password:
+ lowercase: must include at least one lower case
+ uppercase: must include at least one upper case
+ number: must include at least one number
+ invalid: invalid
+ not_exist: not exist
diff --git a/pos-module-openai/modules/core/public/views/layouts/basic.liquid b/pos-module-openai/modules/core/public/views/layouts/basic.liquid
new file mode 100644
index 0000000..6b57c72
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/layouts/basic.liquid
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/pos-module-openai/modules/core/public/views/layouts/mailer.html.liquid b/pos-module-openai/modules/core/public/views/layouts/mailer.html.liquid
new file mode 100644
index 0000000..510f6a1
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/layouts/mailer.html.liquid
@@ -0,0 +1,46 @@
+{% liquid
+ assign rtl_languages = 'ar,arc,dv,fa,ha,he,khw,ks,ku,ps,ur,yi' | split: ','
+ if rtl_languages contains context.language
+ assign direction = 'rtl'
+ else
+ assign direction = 'ltr'
+ endif
+ assign url = 'https://' | append: context.location.host
+%}
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
+
+
diff --git a/pos-module-openai/modules/core/public/views/pages/_events/index.liquid b/pos-module-openai/modules/core/public/views/pages/_events/index.liquid
new file mode 100644
index 0000000..e5c90c8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/pages/_events/index.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/core/basic
+slug: _events
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function events = 'modules/core/queries/events/search', limit: 50, page: null, uuids: null
+
+ render 'modules/core/events/list', events: events
+ endif
+%}
diff --git a/pos-module-openai/modules/core/public/views/pages/_events/trigger.liquid b/pos-module-openai/modules/core/public/views/pages/_events/trigger.liquid
new file mode 100644
index 0000000..85099b8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/pages/_events/trigger.liquid
@@ -0,0 +1,20 @@
+---
+layout: modules/core/basic
+slug: _events/:uuid/trigger
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function event = 'modules/core/queries/events/find', uuid: context.params.uuid
+
+ if context.params.trigger
+ function event = 'modules/core/commands/events/broadcast', object: event, deprecated_delay: null, deprecated_max_attempts: null
+ echo 'BROADCASTED'
+ else
+ assign name = 'consumers/' | append: event.type | append: '/'
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+ assign event.consumers = consumers
+ endif
+
+ render 'modules/core/events/show', event: event
+ endif
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/.gitkeep b/pos-module-openai/modules/core/public/views/partials/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/views/partials/events/event_card.liquid b/pos-module-openai/modules/core/public/views/partials/events/event_card.liquid
new file mode 100644
index 0000000..fcee8e2
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/events/event_card.liquid
@@ -0,0 +1,56 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+{% liquid
+ assign event_slim = event | deep_clone
+ assign _ = event_slim | hash_delete_key: 'object'
+ assign _ = event_slim | hash_delete_key: 'actor'
+ assign _ = event_slim | hash_delete_key: 'target'
+ assign _ = event_slim | hash_delete_key: 'id'
+ assign _ = event_slim | hash_delete_key: 'uuid'
+ assign _ = event_slim | hash_delete_key: 'date'
+ assign _ = event_slim | hash_delete_key: 'valid'
+ assign _ = event_slim | hash_delete_key: 'errors'
+ assign _ = event_slim | hash_delete_key: 'attributed_to'
+ assign _ = event_slim | hash_delete_key: 'type'
+ assign consumers = event_slim | hash_delete_key: 'consumers'
+%}
+
+
+ Event: {{ event.type }} {{ event.object.name | replace: "app.statuses.", "" }}
+
+
+ Date: {{ event.date | l }}
+
+
+ Attributes:
+
+
{{ event_slim }}
+
+
+
+
+
+
+
UUID: {{ event.uuid }}
+ {% if consumers %}
+
+ Consumers:
+
+ {% for consumer in consumers %}
+ {{ consumer.path }}
+ {% endfor %}
+
+
+ {% endif %}
+
+ show |
+ broadcast |
+
+
+
diff --git a/pos-module-openai/modules/core/public/views/partials/events/list.liquid b/pos-module-openai/modules/core/public/views/partials/events/list.liquid
new file mode 100644
index 0000000..d6c0c4a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/events/list.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} events - The events collection
+{% enddoc %}
+
+
Events
+ {{ events.results.size }} / {{ events.total_entries }}
+ {% for event in events.results %}
+ {% render 'modules/core/events/event_card', event: event.payload %}
+
+ {% else %}
+ no events found
+ {% endfor %}
+
diff --git a/pos-module-openai/modules/core/public/views/partials/events/show.liquid b/pos-module-openai/modules/core/public/views/partials/events/show.liquid
new file mode 100644
index 0000000..665a505
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/events/show.liquid
@@ -0,0 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
+
Event
+
<< List
+{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/.keep b/pos-module-openai/modules/core/public/views/partials/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send.liquid
new file mode 100644
index 0000000..f03248b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
+ function object = 'modules/core/commands/email/send/build', object: object
+ function object = 'modules/core/commands/email/send/check', object: object
+
+ if object.valid
+ graphql r = 'modules/core/email/send', template: 'modules/core/generic', data: object
+ if r.errors
+ log r.errors, type: 'errors.graphql.invalid'
+
+ assign object.valid = false
+ assign object.errors = r.errors
+ endif
+ else
+ log object.errors, type: 'payload validation error in core: lib/commands/email'
+ endif
+
+ return object
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/build.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/build.liquid
new file mode 100644
index 0000000..5e57d28
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/build.liquid
@@ -0,0 +1,13 @@
+{% parse_json object %}
+ {
+ "layout": {{ object.layout | default: 'modules/core/mailer' | json }},
+ "from": {{ object.from | json }},
+ "to": {{ object.to | json }},
+ "subject": {{ object.subject | json }},
+ "cc": {{ object.cc | json }},
+ "bcc": {{ object.bcc | json }},
+ "partial": {{ object.partial | json }},
+ "data": {{ object.data | json }}
+ }
+{% endparse_json %}
+{% return object %}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/check.liquid
new file mode 100644
index 0000000..50c8aec
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/alter.liquid
new file mode 100644
index 0000000..43fbfa5
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
+ assign original_params = params_to_modify | deep_clone
+
+ assign hook = '/hook_' | append: hook | append: '_alter'
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function _ = implementation.path, params_to_modify: params_to_modify, params: params
+ endfor
+
+ assign result = { "original_params": original_params }
+ return result
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/fire.liquid
new file mode 100644
index 0000000..48cd149
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ if merge_to_object
+ assign results = {}
+ else
+ assign results = []
+ endif
+
+ assign hook = '/hook_' | append: hook
+ function implementations = 'modules/core/lib/queries/hook/search', hook: hook
+
+ for implementation in implementations
+ function hook_result = implementation.path, params: params
+ if hook_result != nil
+ comment
+ Check if the result is an array and merge the values one by one.
+ endcomment
+ if hook_result[0]
+ for h_result in hook_result
+ assign results << h_result
+ endfor
+ comment
+ Check if the result is an object.
+ endcomment
+ elsif hook_result.first and merge_to_object
+ assign results = results | hash_merge: hook_result
+ else
+ assign results << hook_result
+ endif
+ endif
+ endfor
+
+ return results
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-openai/modules/core/public/views/partials/lib/commands/variable/set.liquid
new file mode 100644
index 0000000..dc2577b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
+ graphql result = 'modules/core/variable/set', name: name, value: value
+ return result.variable
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-openai/modules/core/public/views/partials/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..f016b3e
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
+
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
+
+ return contract
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/hooks/.keep b/pos-module-openai/modules/core/public/views/partials/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/.keep b/pos-module-openai/modules/core/public/views/partials/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/get.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
new file mode 100644
index 0000000..37efd30
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/get.liquid
@@ -0,0 +1,6 @@
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ log 'Use queries/headscripts/get instead of lib/queries/headscripts/get', type: 'DEPRECATION'
+ function res = 'modules/core/lib/queries/headscripts/search', merge_to_object: false
+ return res
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
new file mode 100644
index 0000000..72607a4
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
+{% liquid
+ log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
+ assign results = headscript_implementations | join: ''
+ return results | html_safe
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/hook/search.liquid
new file mode 100644
index 0000000..f97ad06
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
+ graphql implementations = 'modules/core/hook/search', hook: hook
+ return implementations.admin_liquid_partials.results
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/module/exists.liquid
new file mode 100644
index 0000000..9801f78
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function modules = 'modules/core/lib/queries/registry/search', type: type
+ assign module = modules | array_detect: machine_name: name
+
+ if module
+ return true
+ endif
+
+ return false
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/get.liquid
new file mode 100644
index 0000000..adbdeda
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function registry = 'modules/core/lib/queries/registry/search', type: type
+ return registry
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/search.liquid
new file mode 100644
index 0000000..ae8f96c
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
+
+ case type
+ when 'module'
+ assign modules = []
+ for module in registry
+ if module.type == 'module'
+ assign modules << module
+ endif
+ endfor
+ return modules
+ when 'theme'
+ assign themes = []
+ for module in registry
+ if module.type == 'theme'
+ assign themes << module
+ endif
+ endfor
+ return themes
+ endcase
+ return registry
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/find.liquid
new file mode 100644
index 0000000..c2ec54c
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
+{% liquid
+ assign value = context.constants[name] | default: default, allow_false: true
+
+ case type
+ when 'boolean'
+ if value == 'true' or value == true
+ return true
+ else
+ return false
+ endif
+ when 'integer'
+ assign value = value | plus: 0
+ return value
+ when 'float'
+ assign value = value | plus: 0
+ return value
+ when 'array'
+ assign value = value | split: ','
+ return value
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/get.liquid
new file mode 100644
index 0000000..f6ba482
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% liquid
+ # TODO: remove after rewriting dependent modules
+ function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
+ return res
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/date.liquid
new file mode 100644
index 0000000..e4d6a7b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/date.liquid
@@ -0,0 +1,79 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
+ assign date = date | default: object[field_name] | to_date
+
+ assign is_past = date | is_date_in_past
+ assign now = 'now' | to_date
+
+ if date > now
+ assign is_future = true
+ else
+ assign is_future = false
+ endif
+
+ if can_be_past == false and is_past
+ assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if can_be_future == false and is_future
+ assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lt != null
+ assign lt = lt | to_date
+ if date >= lt
+ assign localized_date = lt | l
+ assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if lte != null
+ assign lte = lte | to_date
+ if date > lte
+ assign localized_date = lte | l
+ assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gt != null
+ assign gt = gt | to_date
+ if date <= gt
+ assign localized_date = gt | l
+ assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if gte != null
+ assign gte = gte | to_date
+ if date < gte
+ assign localized_date = gte | l
+ assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/each_element_length.liquid
new file mode 100644
index 0000000..2c7f107
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
+ for el in object[field_name]
+
+ assign size = el.size
+
+ if minimum != null and size < minimum
+ assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ assign message = el | append: ' ' | append: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ endfor
+
+ return c
+
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/elements_included.liquid
new file mode 100644
index 0000000..bd8035b
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
+ for val in object[field_name]
+ unless array contains val
+ assign key = key | default: "modules/core/validation.array.not_included"
+ assign message = key | t: value: val
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endunless
+ endfor
+
+ return c
+%}
+
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/email.liquid
new file mode 100644
index 0000000..6699b19
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/email.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
+ assign valid_email = object[field_name] | is_email_valid
+ unless valid_email
+ assign key = key | default: "modules/core/validation.email"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/equal.liquid
new file mode 100644
index 0000000..97284b8
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -0,0 +1,24 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
+ if given != expected
+
+ if message == blank and key == blank
+ if not_verbose
+ assign message = 'modules/core/validation.equal_not_verbose' | t
+ else
+ assign message = 'modules/core/validation.equal' | t: given: given, expected: expected
+ endif
+ endif
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: key
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
new file mode 100644
index 0000000..c86b2fc
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -0,0 +1,32 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
+ assign property_name = property_name | default: ''
+ assign property_value = property_value | default: ''
+ assign scope_name = scope_name | default: ''
+ assign scope_value = scope_value | default: ''
+ assign exclude_name = exclude_name | default: ''
+ assign exclude_value = exclude_value | default: ''
+ assign key = key | default: 'modules/core/validation.not_exist'
+
+ graphql r = 'modules/core/records/count', ids: ids, not_ids: not_ids, property_name: property_name, property_value: property_value, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count == 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
new file mode 100644
index 0000000..7693b5a
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
+ assign hcaptcha_solved = hcaptcha_params | hcaptcha
+ unless hcaptcha_solved
+ assign key = key | default: "modules/core/validation.hcaptcha"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/included.liquid
new file mode 100644
index 0000000..85b4d16
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/included.liquid
@@ -0,0 +1,18 @@
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ unless array contains value
+ assign key = key | default: "modules/core/validation.not_included"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
+
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/length.liquid
new file mode 100644
index 0000000..403a064
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/length.liquid
@@ -0,0 +1,49 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ assign size = value.size
+ assign is = is | default: null
+ assign minimum = minimum | default: null
+ assign maximum = maximum | default: null
+
+ if allow_blank == null
+ assign allow_blank = true
+ endif
+ if allow_blank != true
+ if size == blank
+ assign message = message_blank | default: 'modules/core/validation.length.blank' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ endif
+
+ if minimum != null and size < minimum
+ assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if maximum != null and size > maximum
+ assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if is != null and size != is
+ assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/matches.liquid
new file mode 100644
index 0000000..fb47b05
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
+ if allow_blank and object[field_name] == blank
+ return c
+ endif
+
+ assign matches = object[field_name] | matches: regexp
+ if matches != true
+ assign message = message | default: 'modules/core/validation.matches' | t
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/not_null.liquid
new file mode 100644
index 0000000..23d6bd0
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
+ if object[field_name] == null
+ assign key = key | default: "modules/core/validation.null"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/number.liquid
new file mode 100644
index 0000000..6a11fe0
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/number.liquid
@@ -0,0 +1,70 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
+{% liquid
+ assign number = number | default: object[field_name]
+ log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
+%}
+{% capture test1 %}{{ number }}{% endcapture %}
+{% capture test2 %}{{ test1 | plus: 0 }}{% endcapture %}
+{% liquid
+ if test1 != test2
+ assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+
+ return c
+ endif
+
+ assign number = number | plus: 0
+
+ if lt != null and number >= lt
+ assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if lte == blank
+ assign lte = 2147483647
+ endif
+ if number > lte
+ assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gt != null and number <= gt
+ assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if gte != null and number < gte
+ assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if eq != null and number != eq
+ assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ if ne != null and number == ne
+ assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/password_complexity.liquid
new file mode 100644
index 0000000..04bb51c
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
+ assign decoded_pw = object.password
+
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
+ if complex_password
+ assign has_lowercase = decoded_pw | matches: '[a-z]'
+ unless has_lowercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
+ endunless
+
+ assign has_uppercase = decoded_pw | matches: '[A-Z]'
+ unless has_uppercase
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
+ endunless
+
+ assign has_number = decoded_pw | matches: '\d'
+ unless has_number
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
+ endunless
+ endif
+
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/presence.liquid
new file mode 100644
index 0000000..06862bd
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
+ if object[field_name] == blank
+ assign key = key | default: "modules/core/validation.blank"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/truthy.liquid
new file mode 100644
index 0000000..9b2a93e
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
+ unless object[field_name]
+ assign key = key | default: "modules/core/validation.not_truthy"
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endunless
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/unique_elements.liquid
new file mode 100644
index 0000000..f052483
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -0,0 +1,17 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
+ assign unique_count = object[field_name] | uniq | size
+
+ if unique_count != object[field_name].size
+ assign key = key | default: 'modules/core/validation.array.not_unique'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/uniqueness.liquid
new file mode 100644
index 0000000..66d62c7
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
+ assign key = key | default: 'modules/core/validation.taken'
+ assign value = object[field_name]
+ if value != blank
+ if object.id != blank
+ assign not_ids = object.id | split: ','
+ endif
+ if scope_name
+ assign scope_value = object[scope_name]
+ else
+ assign scope_name = ''
+ endif
+
+ if exclude_name
+ assign exclude_value = object[exclude_name]
+ else
+ assign exclude_name = ''
+ endif
+
+ graphql r = 'modules/core/records/count', property_name: field_name, property_value: value, not_ids: not_ids, table: table, scope_name: scope_name, scope_value: scope_value, exclude_name: exclude_name, exclude_value: exclude_value
+
+ assign count = r.records.total_entries
+ if count > 0
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+ endif
+ return c
+%}
diff --git a/pos-module-openai/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-openai/modules/core/public/views/partials/lib/validations/valid_object.liquid
new file mode 100644
index 0000000..690addf
--- /dev/null
+++ b/pos-module-openai/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
+{% liquid
+ log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
+ assign value = value | default: object[field_name]
+ if value
+ function check_object = check_function, object: value
+ if check_object.valid != true
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
+ assign errors_key = field_name | append: '_errors'
+ assign c.errors[errors_key] = check_object.errors
+ endif
+ endif
+
+ return c
+%}
diff --git a/pos-module-openai/modules/core/template-values.json b/pos-module-openai/modules/core/template-values.json
new file mode 100644
index 0000000..19f3315
--- /dev/null
+++ b/pos-module-openai/modules/core/template-values.json
@@ -0,0 +1,7 @@
+{
+ "name": "Pos Module Core",
+ "machine_name": "core",
+ "type": "module",
+ "version": "2.1.6",
+ "dependencies": {}
+}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create.liquid
index d5da6f2..f9d23e6 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
function object = 'modules/openai/commands/embeddings/create/build', object: object
function object = 'modules/openai/commands/embeddings/create/check', object: object
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/build.liquid
index 44f6bf5..542026f 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/build.liquid
@@ -1,10 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign embedding = '{}' | parse_json
-
- hash_assign embedding['embedding'] = object.embedding
- hash_assign embedding['content'] = object.content
- hash_assign embedding['metadata'] = object.metadata
- hash_assign embedding['token_count'] = object.token_count
+ assign embedding = { "embedding": object.embedding, "content": object.content, "metadata": object.metadata, "token_count": object.token_count }
return embedding
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/check.liquid
index eb26138..cb5c5a7 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/check.liquid
@@ -1,11 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'embedding'
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'embedding', is: 1536
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'embedding', key: 'embedding'
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'embedding', is: 1536, allow_blank: false, minimum: null, maximum: null, value: null, message_is: null, message_minimum: null, message_maximum: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content', key: 'content'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/execute.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/execute.liquid
index 7674aec..6319ade 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/execute.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/create/execute.liquid
@@ -1,9 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
graphql r = 'modules/openai/embeddings/create', args: object
assign object = r.embedding_create
- hash_assign object['valid'] = true
+ assign object.valid = true
return object
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete.liquid
index 27529b5..b3e671b 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
function object = 'modules/openai/commands/embeddings/delete/build', object: object, id: id
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/build.liquid
index 5315d48..e29276e 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/build.liquid
@@ -1,7 +1,10 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
assign id = id | default: object.id
- assign embedding = '{}' | parse_json
- hash_assign embedding['id'] = id
+ assign embedding = { "id": id }
return embedding
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/check.liquid
index 67e2c81..66b0e62 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/delete/check.liquid
@@ -1,9 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: 'id'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update.liquid
index 9b2425f..2cadc1d 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
function object = 'modules/openai/commands/embeddings/update/build', object: object, id: id
function object = 'modules/openai/commands/embeddings/update/check', object: object
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/build.liquid
index 3d57b43..7b19883 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/build.liquid
@@ -1,13 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
assign id = id | default: object.id
- assign embedding = '{}' | parse_json
- hash_assign embedding['id'] = id
-
- hash_assign embedding['embedding'] = object.embedding
- hash_assign embedding['content'] = object.content
- hash_assign embedding['metadata'] = object.metadata
- hash_assign embedding['token_count'] = object.token_count
+ assign embedding = { "id": id, "embedding": object.embedding, "content": object.content, "metadata": object.metadata, "token_count": object.token_count }
return embedding
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/check.liquid
index 866cfd6..d43c223 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/check.liquid
@@ -1,12 +1,17 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'embedding'
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'embedding', is: 1536
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'embedding', key: 'embedding'
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'embedding', is: 1536, allow_blank: false, minimum: null, maximum: null, value: null, message_is: null, message_minimum: null, message_maximum: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content', key: 'content'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/execute.liquid b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/execute.liquid
index 3909418..38c3613 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/execute.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/embeddings/update/execute.liquid
@@ -1,9 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
graphql r = 'modules/openai/embeddings/update', args: object
assign object = r.embedding_update
- hash_assign object['valid'] = true
+ assign object.valid = true
return object
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/build.liquid
index aed1ea7..4965f3c 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/build.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{%- comment -%}
Creates an OpenAI API request data with customizable parameters.
object: JSON Object
@@ -74,31 +77,30 @@ See also: https://platform.openai.com/docs/api-reference/chat
{%- liquid
- hash_assign data_frame['model'] = object['model'] | default: "gpt-4o-mini"
- hash_assign data_frame['temperature'] = object['temperature'] | default: 1
- hash_assign data_frame['messages'][0]['content'] = object['system_message'] | default: ""
- hash_assign data_frame['messages'][1]['content'][0]['text'] = object['user_message'] | default: ""
+ assign data_frame.model = object['model'] | default: "gpt-4o-mini"
+ assign data_frame.temperature = object['temperature'] | default: 1
+ assign data_frame.messages[0].content = object['system_message'] | default: ""
+ assign data_frame.messages[1].content[0].text = object['user_message'] | default: ""
- assign user_images = object['user_images'] | default: '[]' | parse_json
+ assign user_images = object['user_images'] | default: "[]"
if user_images.size > 0
- assign user_content = data_frame['messages'][1]['content']
+ assign user_content = data_frame.messages[1].content
for item in user_images
- assign img_object = null | hash_merge: type: "image_url" | hash_merge: image_url: null
- hash_assign img_object['image_url'] = null | hash_merge: url: item
- assign user_content = user_content | array_add: img_object
+ assign img_object = { "type": "image_url", "image_url": { "url": item } }
+ assign user_content << img_object
endfor
- hash_assign data_frame['messages'][1]['content'] = user_content
+ assign data_frame.messages[1].content = user_content
endif
assign response_format_schema_json = object['response_format_schema_json'] | default: null
if response_format_schema_json != blank
- hash_assign data_frame['response_format']['json_schema']['schema']['properties'] = response_format_schema_json
+ assign data_frame.response_format.json_schema.schema.properties = response_format_schema_json
else
- hash_assign data_frame['response_format'] = null
+ assign data_frame.response_format = null
endif
return data_frame
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/check.liquid
index bec7854..34eff77 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/check.liquid
@@ -1,9 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object.messages[1].content[0], field_name: 'text'
+ function c = 'modules/core/validations/presence', c: c, object: object.messages[1].content[0], field_name: 'text', key: 'text'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/completions.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/completions.liquid
index df2c910..d5f407a 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/chat/completions.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/chat/completions.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{%- liquid
function object = 'modules/openai/commands/openai/chat/build', object: object;
function checked_object = 'modules/openai/commands/openai/chat/check', object: object;
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings.liquid
index 4ec35e8..cb1d251 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
function object = 'modules/openai/commands/openai/fetch_embeddings/build', object: object
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/build.liquid
index 8d263ff..1f2db44 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/build.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% parse_json request_object %}
{% assign model = context.constants['modules/openai/OPENAI_MODEL'] | default: "text-embedding-ada-002" %}
{% assign version = context.constants['modules/openai/OPENAI_VERSION'] | default: "v1" %}
@@ -21,14 +24,14 @@
assign arr = object
assign obj_type = object | type_of
if obj_type != 'Array'
- assign arr = '[]' | parse_json | add_to_array: object
+ assign arr = [object]
endif
assign arr = arr
- hash_assign request_object['data']['payload']['input'] = arr | compact
+ assign request_object.data.payload.input = arr | compact
else
log "modules/openai/fetch_embeddings - object is null, should be an array of strings that will be transformed to embeddings", type: 'ERROR'
endif
return request_object
-%}
+ %}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/check.liquid
index 2a5d10c..ca25032 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/fetch_embeddings/check.liquid
@@ -1,9 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object.data.payload, field_name: 'input'
+ function c = 'modules/core/validations/presence', c: c, object: object.data.payload, field_name: 'input', key: 'input'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/build.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/build.liquid
index c4be056..687f598 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/build.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/build.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{%- comment -%}
Creates an OpenAI API request data with customizable parameters.
object: JSON Object
@@ -77,38 +80,38 @@ See also: https://platform.openai.com/docs/api-reference/responses/create
{%- liquid
- hash_assign data_frame['model'] = object['model'] | default: "gpt-4o-mini"
- hash_assign data_frame['temperature'] = object['temperature'] | default: 1
- hash_assign data_frame['input'][0]['content'] = object['system_message'] | default: ""
- hash_assign data_frame['input'][1]['content'][0]['text'] = object['user_message'] | default: ""
+ assign data_frame.model = object['model'] | default: "gpt-4o-mini"
+ assign data_frame.temperature = object['temperature'] | default: 1
+ assign data_frame.input[0].content = object['system_message'] | default: ""
+ assign data_frame.input[1].content[0].text = object['user_message'] | default: ""
- assign user_images = object['user_images'] | default: '[]' | parse_json
+ assign user_images = object['user_images'] | default: "[]"
if user_images.size > 0
- assign user_content = data_frame['input'][1]['content']
+ assign user_content = data_frame.input[1].content
for item in user_images
- assign img_object = null | hash_merge: type: "input_image" | hash_merge: image_url: item
- assign user_content = user_content | array_add: img_object
+ assign img_object = { "type": "input_image", "image_url": item }
+ assign user_content << img_object
endfor
- hash_assign data_frame['input'][1]['content'] = user_content
+ assign data_frame.input[1].content = user_content
endif
assign response_format_schema_json = object['response_format_schema_json'] | default: null
assign response_format_required_fields = object['response_format_required_fields'] | default: null
if response_format_schema_json != blank
- hash_assign data_frame['text']['format']['schema']['properties'] = response_format_schema_json
+ assign data_frame.text.format.schema.properties = response_format_schema_json
if response_format_required_fields == blank
- assign required = data_frame['text']['format']['schema']['properties'] | hash_keys
- hash_assign data_frame['text']['format']['schema']['required'] = required
+ assign required = data_frame.text.format.schema.properties | hash_keys
+ assign data_frame.text.format.schema.required = required
else
- hash_assign data_frame['text']['format']['schema']['required'] = response_format_required_fields
+ assign data_frame.text.format.schema.required = response_format_required_fields
endif
else
- hash_assign data_frame['text'] = null
+ assign data_frame.text = null
endif
return data_frame
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/check.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/check.liquid
index 79fb1db..0acd6cc 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/check.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/check.liquid
@@ -1,9 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object.input[1].content[0], field_name: 'text'
+ function c = 'modules/core/validations/presence', c: c, object: object.input[1].content[0], field_name: 'text', key: 'text'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/create.liquid b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/create.liquid
index 394f58b..1960f80 100644
--- a/pos-module-openai/modules/openai/public/lib/commands/openai/responses/create.liquid
+++ b/pos-module-openai/modules/openai/public/lib/commands/openai/responses/create.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{%- liquid
function object = 'modules/openai/commands/openai/responses/build', object: object;
function checked_object = 'modules/openai/commands/openai/responses/check', object: object;
diff --git a/pos-module-openai/modules/openai/public/lib/queries/embeddings/search.liquid b/pos-module-openai/modules/openai/public/lib/queries/embeddings/search.liquid
index cbdb01d..87bcc6e 100644
--- a/pos-module-openai/modules/openai/public/lib/queries/embeddings/search.liquid
+++ b/pos-module-openai/modules/openai/public/lib/queries/embeddings/search.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {object} metadata - Metadata filter
+ @param {object} related_to - Related embedding vector for similarity search
+{% enddoc %}
{% liquid
assign page = page | to_positive_integer: 1
diff --git a/pos-module-openai/template-values.json b/pos-module-openai/template-values.json
index de6d548..2475366 100644
--- a/pos-module-openai/template-values.json
+++ b/pos-module-openai/template-values.json
@@ -2,7 +2,7 @@
"name": "pos-module-openai",
"machine_name": "openai",
"type": "module",
- "version": "1.1.0",
+ "version": "1.2.0",
"dependencies": {
"core": "^2.0.0"
}
diff --git a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/transaction_finalize.liquid b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/transaction_finalize.liquid
index 721ce57..207301b 100644
--- a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/transaction_finalize.liquid
+++ b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/transaction_finalize.liquid
@@ -1,6 +1,6 @@
{% liquid
# THIS is just a mock
- assign object = null | hash_merge: valid: true
+ assign object = {"valid": true}
return object
%}
diff --git a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/update_transaction_status/map_response.liquid b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/update_transaction_status/map_response.liquid
index 7e8e8d5..e0ab314 100644
--- a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/update_transaction_status/map_response.liquid
+++ b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/commands/update_transaction_status/map_response.liquid
@@ -1,18 +1,18 @@
{% liquid
- assign object = '{}' | parse_json
+ assign object = {}
if gateway_request.request_data
assign request_data = gateway_request.request_data | parse_json
- hash_assign object['transaction_id'] = request_data['transaction_id']
+ assign object.transaction_id = request_data['transaction_id']
if request_data['payment_status'] == 'success'
- hash_assign object['payment_status'] = 'succeeded'
+ assign object.payment_status = 'succeeded'
else
- hash_assign object['payment_status'] = 'failed'
+ assign object.payment_status = 'failed'
endif
- hash_assign object['valid'] = true
+ assign object.valid = true
else
- hash_assign object['valid'] = false
+ assign object.valid = false
endif
return object
diff --git a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/helpers/pay_object.liquid b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/helpers/pay_object.liquid
index 594c77f..9f06fe4 100644
--- a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/helpers/pay_object.liquid
+++ b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/lib/helpers/pay_object.liquid
@@ -3,7 +3,7 @@
assign failed_url = gateway_params.failed_url | default: gateway_params.cancel_url
assign url = template | expand_url_template: transaction_id: transaction.id, success_url: gateway_params.success_url, failed_url: failed_url
- assign object = null | hash_merge: valid: true, url: url
+ assign object = {"valid": true, "url": url}
return object
%}
diff --git a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/views/pages/payments/example_gateway/webhook.liquid b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/views/pages/payments/example_gateway/webhook.liquid
index 6871a2e..54f585b 100644
--- a/pos-module-payments-example-gateway/modules/payments_example_gateway/public/views/pages/payments/example_gateway/webhook.liquid
+++ b/pos-module-payments-example-gateway/modules/payments_example_gateway/public/views/pages/payments/example_gateway/webhook.liquid
@@ -3,7 +3,9 @@ method: post
---
{% liquid
if context.params.payment_status == 'success_delayed'
- assign object = context.params | hash_merge: payment_status: 'success', valid: true
+ assign object = context.params
+ assign object.payment_status = 'success'
+ assign object.valid = true
background _ = 'modules/payments_example_gateway/commands/update_transaction_status', object: object, delay: 0.25
else
function object = 'modules/payments_example_gateway/commands/update_transaction_status', object: context.params
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create.liquid
index 8a7589d..ca81eaa 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create.liquid
@@ -6,7 +6,7 @@
if object.account_id == blank
function account = 'modules/payments_stripe/commands/stripe_connected_accounts/create', reference_id: object.reference_id, metadata: object
- hash_assign object['account_id'] = account.id
+ assign object.account_id = account.id
endif
function object = 'modules/payments_stripe/commands/connected_accounts/create/build', object: object
function object = 'modules/payments_stripe/commands/connected_accounts/create/check', object: object
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create/check.liquid
index 63350e4..32a176b 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/create/check.liquid
@@ -1,11 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'account_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'state'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'account_id', table: 'modules/payments_stripe/connected_account'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete.liquid
index 3f24851..493812a 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete.liquid
@@ -6,7 +6,7 @@
function _connected_account = 'modules/payments_stripe/commands/stripe_connected_accounts/delete', object: updated_object
function updated_object = 'modules/core/commands/execute', mutation_name: 'modules/payments_stripe/connected_accounts/delete', object: updated_object
- assign event_payload = null | hash_merge: connected_account_id: updated_object.id, reference_id: object.reference_id
+ assign event_payload = {"connected_account_id": updated_object.id, "reference_id": object.reference_id}
function _ = 'modules/core/commands/events/publish', type: 'payments_stripe_connected_account_deleted', object: event_payload
else
log object, type: "ERROR: modules/payments_stripe/commands/connected_accounts/delete"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/build.liquid
index 5ac3576..9613713 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/build.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign object = null | hash_merge: id: object.id, account_id: object.account_id, reference_id: object.reference_id
+ assign object = {"id": object.id, "account_id": object.account_id, "reference_id": object.reference_id}
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/check.liquid
index d9de936..24e4079 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/delete/check.liquid
@@ -1,10 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'account_id'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update.liquid
index c75e618..821e69a 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update.liquid
@@ -5,7 +5,7 @@
if object.valid
function object = 'modules/core/commands/execute', mutation_name: 'modules/payments_stripe/connected_accounts/update', object: object
- assign event_payload = null | hash_merge: connected_account_id: object.id, reference_id: object.reference_id, account_state: object.state
+ assign event_payload = {"connected_account_id": object.id, "reference_id": object.reference_id, "account_state": object.state}
function _ = 'modules/core/commands/events/publish', type: 'payments_stripe_connected_account_updated', object: event_payload
else
log object, type: "ERROR: modules/payments_stripe/commands/connected_accounts/update"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/build.liquid
index 911b7f3..5dc111c 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/build.liquid
@@ -1,4 +1,6 @@
{% liquid
- assign object = object | hash_merge: data: params, last_errors: params.requirements.disabled_reason, state: params.state
+ assign object.data = params
+ assign object.last_errors = params.requirements.disabled_reason
+ assign object.state = params.state
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/check.liquid
index 353ebaf..888f5c0 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/connected_accounts/update/check.liquid
@@ -1,11 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'account_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'state'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create.liquid
index 148994f..b8ea1eb 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create.liquid
@@ -1,7 +1,7 @@
{% liquid
function customer = 'modules/payments_stripe/queries/customers/find_by_customer_id', customer_id: object.customer_id
if customer
- hash_assign customer['valid'] = true
+ assign customer.valid = true
return customer
endif
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/build.liquid
index 2770495..efd03e1 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/build.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign object = null | hash_merge: customer_id: object.customer_id, reference_id: object.reference_id, email: object.email, name: object.name, stripe_account_name: object.stripe_account_name
+ assign object = {"customer_id": object.customer_id, "reference_id": object.reference_id, "email": object.email, "name": object.name, "stripe_account_name": object.stripe_account_name}
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/check.liquid
index 7026a28..5328bfc 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/customers/create/check.liquid
@@ -1,10 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'customer_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'customer_id', table: 'modules/payments_stripe/customer'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_bank_account/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_bank_account/check.liquid
index 1628232..50bef14 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_bank_account/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_bank_account/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'payment_method_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'customer_id'
@@ -8,7 +8,8 @@
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'bank_name'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'last4'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'payment_method_id', table: 'modules/payments_stripe/payment_method'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_card/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_card/check.liquid
index ed8f2f9..6a09f7f 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_card/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payment_methods/create_card/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'payment_method_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'customer_id'
@@ -8,7 +8,8 @@
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'brand'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'last4'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'payment_method_id', table: 'modules/payments_stripe/payment_method'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/create/check.liquid
index 75bce4c..79e781e 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/create/check.liquid
@@ -1,11 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'connected_account_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'state'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'connected_account_id', table: 'modules/payments_stripe/connected_account'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook.liquid
index 0d9c0cb..1af7513 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook.liquid
@@ -6,7 +6,7 @@
function payout = 'modules/payments_stripe/commands/payouts/create', object: object
function _gateway_request = 'modules/payments/commands/gateway_requests/receive', object: params.data.object, name: params.type, external_id: payout.id, request_url: request_url, stripe_account_name: payout.stripe_account_name
- assign event_payload = null | hash_merge: payout_id: payout.id, connected_account_id: connected_account.id, connected_account_gateway_id: connected_account.account_id, reference_id: connected_account.reference_id
+ assign event_payload = {"payout_id": payout.id, "connected_account_id": connected_account.id, "connected_account_gateway_id": connected_account.account_id, "reference_id": connected_account.reference_id}
assign type = 'payments_stripe_payout_' | append: object.state
function _ = 'modules/core/commands/events/publish', type: type, object: event_payload
else
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/build.liquid
index f5d40ef..da70f51 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/build.liquid
@@ -2,10 +2,7 @@
assign payout_data = object.data.object
assign stripe_payout_date = payout_data.arrival_date | strftime: '%FT%T%z'
assign created_at = payout_data.created | strftime: '%FT%T%z'
- assign data = null | hash_merge: payout_id: payout_data.id, amount_cents: payout_data.amount
- assign data = data | hash_merge: currency: payout_data.currency, gateway_connected_account_id: object.account, connected_account_id: connected_account.id, paid_at: stripe_payout_date, created_at: created_at, state: payout_data.status
- assign data = data | hash_merge: reference_id: connected_account.reference_id
- assign data = data | hash_merge: stripe_account_name: connected_account.stripe_account_name
+ assign data = {"payout_id": payout_data.id, "amount_cents": payout_data.amount, "currency": payout_data.currency, "gateway_connected_account_id": object.account, "connected_account_id": connected_account.id, "paid_at": stripe_payout_date, "created_at": created_at, "state": payout_data.status, "reference_id": connected_account.reference_id, "stripe_account_name": connected_account.stripe_account_name}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/check.liquid
index 401f7a1..a47d533 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/payouts/handle_webhook/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'payout_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'gateway_connected_account_id'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/create/check.liquid
index 473812b..4a3a40a 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/create/check.liquid
@@ -1,11 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'amount'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'transaction_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'status'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/update/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/update/check.liquid
index f6c3eb9..4123f9d 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/update/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/refunds/update/check.liquid
@@ -1,10 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'status'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/build.liquid
index d9b138d..a4b5dfb 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/build.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign object = null | hash_merge: gateway_id: object.gateway_id, reference_id: object.reference_id, c__status: object.c__status, stripe_account_name: object.stripe_account_name
+ assign object = {"gateway_id": object.gateway_id, "reference_id": object.reference_id, "c__status": object.c__status, "stripe_account_name": object.stripe_account_name}
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/check.liquid
index d3fa75a..f309fa8 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/create/check.liquid
@@ -1,10 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'c__status'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'gateway_id', table: 'modules/payments_stripe/setup_intent'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/build.liquid
index 69347d8..c14ad55 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/build.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = null | hash_merge: id: object.id, gateway_id: gateway_id
+ assign data = {"id": object.id, "gateway_id": gateway_id}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/check.liquid
index 7773cfe..cf61499 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_gateway_id/check.liquid
@@ -1,10 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'gateway_id'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status.liquid
index 2f14db0..5a51980 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status.liquid
@@ -6,7 +6,7 @@
if object.valid and object.c__status != setup_intent.c__status
function object = 'modules/core/commands/execute', mutation_name: 'modules/payments_stripe/setup_intents/update' object: object
- assign event_payload = null | hash_merge: setup_intent_id: object.id, payment_method_id: payment_method_id
+ assign event_payload = {"setup_intent_id": object.id, "payment_method_id": payment_method_id}
assign type = object.c__status | remove: 'app.statuses.setup_intents.' | prepend: 'payments_stripe_setup_intent_' | replace: '.', '_'
function _ = 'modules/core/commands/events/publish', type: type, object: event_payload
function _ = 'modules/core/commands/statuses/create', name: object.c__status, reference_id: object.id, requester_id: requester_id, reference_schema: 'modules/payments_stripe/setup_intent', payload: request_payload
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/build.liquid
index dfcffa3..38a55a5 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/build.liquid
@@ -12,6 +12,6 @@
assign status = 'app.statuses.setup_intents.failed'
endcase
- assign data = null | hash_merge: id: setup_intent.id, c__status: status
+ assign data = {"id": setup_intent.id, "c__status": status}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/check.liquid
index 63323dc..88397ca 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/setup_intents/update_status/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'c__status'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/build.liquid
index 2cf27ab..79a0b33 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/build.liquid
@@ -3,8 +3,8 @@ https://api.stripe.com/v1/balance/history?payout={{ payout.payout_id }}&limit=10
{% endcapture %}
{% liquid
assign expand = 'data.source.source_transfer,data.source.source_transfer.source_transaction' | split: ','
- assign payload = null | hash_merge: expand: expand, connected_account_id: payout.gateway_connected_account_id, stripe_account_name: payout.stripe_account_name
- assign data = null | hash_merge: payload: payload, request_type: 'GET', to: url
+ assign payload = {"expand": expand, "connected_account_id": payout.gateway_connected_account_id, "stripe_account_name": payout.stripe_account_name}
+ assign data = {"payload": payload, "request_type": 'GET', "to": url}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_balance_history/retrieve/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/build.liquid
index 29b9645..93d79f9 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/build.liquid
@@ -1,6 +1,6 @@
{% liquid
assign idempotency_key = object | hash_delete_key: 'idempotency_key'
- assign data = null | hash_merge: payload: object, request_type: 'POST', to: 'https://api.stripe.com/v1/charges', idempotency_key: idempotency_key
+ assign data = {"payload": object, "request_type": 'POST', "to": 'https://api.stripe.com/v1/charges', "idempotency_key": idempotency_key}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/create/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook.liquid
index 004038f..15639fe 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook.liquid
@@ -4,7 +4,7 @@
function _gateway_request = 'modules/payments/commands/gateway_requests/receive', object: params.data.object, name: params.type, external_id: transaction.id, request_url: request_url, stripe_account_name: transaction.stripe_account_name
if object.valid
- assign input = null | hash_merge: payment_status: object.status, gateway_transaction_id: object.id
+ assign input = {"payment_status": object.status, "gateway_transaction_id": object.id}
function object = 'modules/payments/commands/transactions/update_status', object: input, transaction: object.transaction, requester_id: requester_id
else
log object, type: "ERROR: modules/payments_stripe/commands/stripe_charge/handle_webhook invalid"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/build.liquid
index caf85cf..2686538 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/build.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = null | hash_merge: transaction: transaction, id: object.id, status: object.status
+ assign data = {"transaction": transaction, "id": object.id, "status": object.status}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/check.liquid
index 384b5fa..a9ebc98 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_charge/handle_webhook/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'status'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete.liquid
index 956a5c9..b310d22 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete.liquid
@@ -9,7 +9,7 @@
if object.valid
function object = 'modules/payments_stripe/commands/stripe_checkout/complete/map_request', object: object
function _customer = 'modules/payments_stripe/commands/customers/create', object: object.customer
- assign input = null | hash_merge: payment_status: object.status
+ assign input = {"payment_status": object.status}
function object = 'modules/payments/commands/transactions/update_status', object: input, transaction: object.transaction, requester_id: requester_id
else
log object, type: "ERROR: modules/payments_stripe/commands/stripe_checkout/complete invalid"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/build.liquid
index 73f6210..94538c6 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/build.liquid
@@ -1,3 +1,4 @@
{% liquid
- return object | default: '{}' | parse_json
-%}
+ assign result = object | default: {}
+ return result
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/check.liquid
index 06145c0..c6273d9 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/check.liquid
@@ -1,13 +1,13 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object.data.object, field_name: 'client_reference_id'
assign ids = object.data.object['client_reference_id'] | split: ','
function c = 'modules/core/validations/exist_in_db', c: c, field_name: 'transaction_id', table: 'modules/payments/transaction', ids: ids
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/map_request.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/map_request.liquid
index 55e2652..47fc007 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/map_request.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/complete/map_request.liquid
@@ -1,33 +1,33 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.request_data
assign response = object.request_data | parse_json
- hash_assign data['valid'] = true
- hash_assign data['external_id'] = response.client_reference_id
+ assign data.valid = true
+ assign data.external_id = response.client_reference_id
function transaction = 'modules/payments/queries/transactions/find', id: data.external_id
- hash_assign data['transaction'] = transaction
- assign customer = nil | hash_merge: customer_id: response.customer, email: response.customer_details.email, name: response.customer_details.name, reference_id: transaction.payer_id
- hash_assign data['customer'] = customer
+ assign data.transaction = transaction
+ assign customer = {"customer_id": response.customer, "email": response.customer_details.email, "name": response.customer_details.name, "reference_id": transaction.payer_id}
+ assign data.customer = customer
case object.name
when 'checkout.session.completed'
- hash_assign data['status'] = 'pending'
+ assign data.status = 'pending'
if response.payment_status == 'paid'
- hash_assign data['status'] = 'succeeded'
+ assign data.status = 'succeeded'
endif
when 'checkout.session.async_payment_succeeded'
- hash_assign data['status'] = 'succeeded'
+ assign data.status = 'succeeded'
when 'checkout.session.async_payment_failed'
- hash_assign data['status'] = 'failed'
+ assign data.status = 'failed'
endcase
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/build.liquid
index 120415c..5e2bd09 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/build.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = null | hash_merge: payload: object, request_type: 'POST', to: 'https://api.stripe.com/v1/checkout/sessions'
+ assign data = {"payload": object, "request_type": 'POST', "to": 'https://api.stripe.com/v1/checkout/sessions'}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/map_response.liquid
index f905911..4c71e7a 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/create/map_response.liquid
@@ -1,17 +1,19 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
- assign data = data | hash_merge: id: response.id, url: response.url, payment_intent: response.payment_intent
- hash_assign data['valid'] = true
+ assign data.id = response.id
+ assign data.url = response.url
+ assign data.payment_intent = response.payment_intent
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/build.liquid
index ccf0aea..0f055c6 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/build.liquid
@@ -2,7 +2,7 @@
assign url = 'https://api.stripe.com/v1/checkout/sessions'
assign url = url | append: '/' | append: transaction.gateway_transaction_id | append: '/expire'
- assign data = null | hash_merge: request_type: 'POST', to: url
+ assign data = {"request_type": 'POST', "to": url}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/expire/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook.liquid
index e0d28fb..5d631f9 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook.liquid
@@ -7,7 +7,7 @@
if object.customer
function _customer = 'modules/payments_stripe/commands/customers/create', object: object.customer
endif
- assign input = null | hash_merge: payment_status: object.status
+ assign input = {"payment_status": object.status}
function object = 'modules/payments/commands/transactions/update_status', object: input, transaction: object.transaction, requester_id: requester_id
else
log object, type: "ERROR: modules/payments_stripe/commands/stripe_checkout/handle_webhook invalid"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/build.liquid
index a49a1aa..bb23fdc 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/build.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign data = null | hash_merge: transaction: transaction, id: object.id, payment_intent_id: object.payment_intent
+ assign data = {"transaction": transaction, "id": object.id, "payment_intent_id": object.payment_intent}
if object.customer
- assign customer = nil | hash_merge: customer_id: object.customer, email: object.customer_details.email, name: object.customer_details.name, reference_id: transaction.payer_id
- hash_assign data['customer'] = customer
+ assign customer = {"customer_id": object.customer, "email": object.customer_details.email, "name": object.customer_details.name, "reference_id": transaction.payer_id}
+ assign data.customer = customer
endif
- hash_assign data['status'] = object.status
+ assign data.status = object.status
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/check.liquid
index 34348e0..b203354 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/handle_webhook/check.liquid
@@ -1,8 +1,8 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/build.liquid
index bd7d71f..1221b88 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/build.liquid
@@ -2,12 +2,12 @@
assign url = 'https://api.stripe.com/v1/checkout/sessions'
assign url = url | append: '/' | append: transaction.gateway_transaction_id
- assign payload = '{}' | parse_json
+ assign payload = {}
if with_payment_intent
- assign expand = '[]' | parse_json | array_add: 'payment_intent'
- assign payload = payload | hash_merge: expand: expand
+ assign expand = ["payment_intent"]
+ assign payload.expand = expand
endif
- assign data = null | hash_merge: payload: payload, request_type: 'GET', to: url
+ assign data = {"payload": payload, "request_type": 'GET', "to": url}
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/retrieve/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent.liquid
index d6a5040..83aa511 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign params = null | hash_merge: reference_id: reference_id, c__status: "app.statuses.setup_intents.new", stripe_account_name: object.stripe_account_name
+ assign params = {"reference_id": reference_id, "c__status": "app.statuses.setup_intents.new", "stripe_account_name": object.stripe_account_name}
function setup_intent = 'modules/payments_stripe/commands/setup_intents/create', object: params
if setup_intent.valid
function object = 'modules/payments_stripe/commands/stripe_checkout/setup_intent/build', object: object
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/build.liquid
index 120415c..5e2bd09 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/build.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = null | hash_merge: payload: object, request_type: 'POST', to: 'https://api.stripe.com/v1/checkout/sessions'
+ assign data = {"payload": object, "request_type": 'POST', "to": 'https://api.stripe.com/v1/checkout/sessions'}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/map_response.liquid
index 2d31acd..2003af3 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_checkout/setup_intent/map_response.liquid
@@ -1,17 +1,19 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
- assign data = data | hash_merge: id: response.id, url: response.url, setup_intent: response.setup_intent
- hash_assign data['valid'] = true
+ assign data.id = response.id
+ assign data.url = response.url
+ assign data.setup_intent = response.setup_intent
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/build.liquid
index 648214d..c35208f 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/build.liquid
@@ -15,5 +15,5 @@
}
{%- endparse_json -%}
{% liquid
- return nil | hash_merge: payload: payload, request_type: 'POST', to: "https://api.stripe.com/v1/accounts"
+ return {"payload": payload, "request_type": 'POST', "to": "https://api.stripe.com/v1/accounts"}
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/map_response.liquid
index cdaed6e..173e1b7 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/create/map_response.liquid
@@ -1,19 +1,19 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
- assign data = data | hash_merge: id: response.id
- hash_assign data['valid'] = true
+ assign data.id = response.id
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
- hash_assign data['stripe_account_name'] = stripe_account_name
+ assign data.stripe_account_name = stripe_account_name
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/build.liquid
index 840a9f2..5105dfb 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/build.liquid
@@ -2,5 +2,5 @@
https://api.stripe.com//v1/accounts/{{ account_id }}
{% endcapture %}
{% liquid
- return nil | hash_merge: payload: null, request_type: 'DELETE', to: url
+ return {"payload": null, "request_type": 'DELETE', "to": url}
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/map_response.liquid
index a2cb0de..1809a9b 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/delete/map_response.liquid
@@ -1,18 +1,18 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
- assign data = data | hash_merge: id: response.id
- hash_assign data['valid'] = true
+ assign data.id = response.id
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/build.liquid
index bf4b203..4537057 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/build.liquid
@@ -1,7 +1,7 @@
{% capture url %}
https://api.stripe.com//v1/accounts/{{ account_id }}/login_links
{% endcapture %}
-{% assign payload = null | hash_merge: stripe_account_name: stripe_account_name %}
+{% assign payload = {"stripe_account_name": stripe_account_name} %}
{% liquid
- return nil | hash_merge: payload: payload, request_type: 'POST', to: url
+ return {"payload": payload, "request_type": 'POST', "to": url}
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/check.liquid
index b063ca7..407591f 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/check.liquid
@@ -1,7 +1,9 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_dashboard_link/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/build.liquid
index d15e839..1541538 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/build.liquid
@@ -8,5 +8,5 @@
}
{%- endparse_json -%}
{% liquid
- return nil | hash_merge: payload: payload, request_type: 'POST', to: "https://api.stripe.com/v1/account_links"
+ return {"payload": payload, "request_type": 'POST', "to": "https://api.stripe.com/v1/account_links"}
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/check.liquid
index 304d11d..14a2eb7 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/check.liquid
@@ -1,11 +1,13 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object.payload, field_name: 'account'
function c = 'modules/core/validations/presence', c: c, object: object.payload, field_name: 'return_url'
function c = 'modules/core/validations/presence', c: c, object: object.payload, field_name: 'type'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/get_onboarding_link/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/build.liquid
index e46aebc..4c9b92d 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/build.liquid
@@ -1,10 +1,10 @@
{% liquid
assign account_data = object.data.object
- hash_assign account_data['state'] = 'pending'
+ assign account_data.state = 'pending'
if account_data.payouts_enabled == true and account_data.charges_enabled == true
- hash_assign account_data['state'] = 'verified'
+ assign account_data.state = 'verified'
endif
return account_data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/check.liquid
index 07a5d00..dd50ad5 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_connected_accounts/handle_webhook/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'state'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/build.liquid
index c25bd59..09eb686 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/build.liquid
@@ -2,8 +2,8 @@
https://api.stripe.com/v1/customers/{{ customer_id }}
{% endcapture %}
{% liquid
- assign payload = null | hash_merge: stripe_account_name: stripe_account_name
- assign data = null | hash_merge: payload: payload, request_type: 'GET', to: url
+ assign payload = {"stripe_account_name": stripe_account_name}
+ assign data = {"payload": payload, "request_type": 'GET', "to": url}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/map_response.liquid
index a1754d6..fcaa275 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_customer/retrieve/map_response.liquid
@@ -1,20 +1,20 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
- hash_assign data['customer_id'] = response.id
- hash_assign data['reference_id'] = payer_id
- hash_assign data['stripe_account_name'] = stripe_account_name
+ assign data.valid = true
+ assign data.customer_id = response.id
+ assign data.reference_id = payer_id
+ assign data.stripe_account_name = stripe_account_name
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/build.liquid
index b38b788..4ebad42 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/build.liquid
@@ -1,6 +1,6 @@
{% liquid
assign idempotency_key = object | hash_delete_key: 'idempotency_key'
- assign data = null | hash_merge: payload: object, request_type: 'POST', to: 'https://api.stripe.com/v1/payment_intents', idempotency_key: idempotency_key
+ assign data = {"payload": object, "request_type": 'POST', "to": 'https://api.stripe.com/v1/payment_intents', "idempotency_key": idempotency_key}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/map_response.liquid
index 6c84bc9..4b21687 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_intent/create/map_response.liquid
@@ -1,17 +1,17 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
assign data = response
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/build.liquid
index 61ffc2a..8669521 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/build.liquid
@@ -2,8 +2,8 @@
https://api.stripe.com/v1/customers/{{ customer_id }}/payment_methods/{{ payment_method_id }}
{% endcapture %}
{% liquid
- assign payload = null | hash_merge: stripe_account_name: stripe_account_name
- assign data = null | hash_merge: payload: payload, request_type: 'GET', to: url
+ assign payload = {"stripe_account_name": stripe_account_name}
+ assign data = {"payload": payload, "request_type": 'GET', "to": url}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/map_response.liquid
index e3d9ff3..673d1fb 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_payment_method/retrieve/map_response.liquid
@@ -1,18 +1,21 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.valid = false
else
- assign payment_method = response[response.type] | hash_merge: payment_method_id: response.id, type: response.type, stripe_account_name: stripe_account_name
+ assign payment_method = response[response.type]
+ assign payment_method.payment_method_id = response.id
+ assign payment_method.type = response.type
+ assign payment_method.stripe_account_name = stripe_account_name
assign data = payment_method
- hash_assign data['valid'] = true
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
+ assign data.valid = false
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/build.liquid
index f968d4b..4ed8c72 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/build.liquid
@@ -1,6 +1,8 @@
{%- liquid
assign payable_ids = transaction.payable_ids | join: ','
- hash_assign object['metadata'] = object.metadata | hash_merge: transaction_id: transaction.id, payable_ids: payable_ids, payer_id: transaction.payer_id
+ assign object.metadata.transaction_id = transaction.id
+ assign object.metadata.payable_ids = payable_ids
+ assign object.metadata.payer_id = transaction.payer_id
-%}
{%- parse_json data -%}
@@ -20,7 +22,7 @@
}
{%- endparse_json -%}
{% liquid
- assign data = null | hash_merge: payload: data, request_type: 'POST', to: 'https://api.stripe.com/v1/refunds'
+ assign data = {"payload": data, "request_type": 'POST', "to": 'https://api.stripe.com/v1/refunds'}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/check.liquid
index edf51b3..78c65fd 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object.payload, field_name: 'amount'
function c = 'modules/core/validations/not_null', c: c, object: object.payload, field_name: 'refund_application_fee'
@@ -17,7 +17,9 @@
function c = 'modules/core/validations/included', c: c, object: object.payload, field_name: 'reason', array: reasons
endif
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/map_response.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/map_response.liquid
index c0afda1..37e5671 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/map_response.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_refund/create/map_response.liquid
@@ -1,19 +1,20 @@
{% liquid
- assign data = '{}' | parse_json
+ assign data = {}
if object.response_body
assign response = object.response_body | parse_json
if response.error
- hash_assign data['errors'] = response.error
- hash_assign data['status'] = 'failed'
- hash_assign data['valid'] = false
+ assign data.errors = response.error
+ assign data.status = 'failed'
+ assign data.valid = false
else
- assign data = response | hash_merge: refund_id: response.id
- hash_assign data['valid'] = true
+ assign data = response
+ assign data.refund_id = response.id
+ assign data.valid = true
endif
else
- hash_assign data['valid'] = false
- hash_assign data['status'] = 'failed'
+ assign data.valid = false
+ assign data.status = 'failed'
endif
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/build.liquid
index 9653133..89cc32f 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/build.liquid
@@ -1,14 +1,14 @@
{% liquid
- assign data = null | hash_merge: setup_intent: setup_intent, id: object.id
+ assign data = {"setup_intent": setup_intent, "id": object.id}
if object.customer
function customer = 'modules/payments_stripe/commands/stripe_customer/retrieve', customer_id: object.customer, payer_id: setup_intent.reference_id, stripe_account_name: setup_intent.stripe_account_name
- hash_assign data['customer'] = customer
+ assign data.customer = customer
if object.payment_method
function payment_method = 'modules/payments_stripe/commands/stripe_payment_method/retrieve', payment_method_id: object.payment_method, customer_id: customer.customer_id, stripe_account_name: setup_intent.stripe_account_name
- hash_assign data['payment_method'] = payment_method
+ assign data.payment_method = payment_method
endif
endif
- hash_assign data['status'] = object.status
+ assign data.status = object.status
return data
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/check.liquid
index a97c3fe..41ee7a8 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_setup_intent/handle_webhook/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'customer'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'payment_method'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/create.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/create.liquid
index dc93f07..bb70bd1 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/create.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/create.liquid
@@ -7,7 +7,7 @@
{% endparse_json %}
{% liquid
assign idempotency_key = 20 | random_string
- assign data = null | hash_merge: to: 'https://api.stripe.com/v1/webhook_endpoints', request_type: 'Post', payload: payload, idempotency_key: idempotency_key, stripe_account_name: stripe_account_name
+ assign data = {"to": 'https://api.stripe.com/v1/webhook_endpoints', "request_type": 'Post', "payload": payload, "idempotency_key": idempotency_key, "stripe_account_name": stripe_account_name}
graphql response = 'modules/payments_stripe/api_call', template: 'modules/payments_stripe/generic', data: data
assign response = response | dig: 'api_call', 'response'
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/build.liquid
index c1dd9a1..87bfe95 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/build.liquid
@@ -2,6 +2,6 @@
assign idempotency_key = 20 | random_string
assign to = 'https://api.stripe.com/v1/webhook_endpoints/' | append: gateway_id
- assign object = null | hash_merge: to: to, request_type: 'Delete', idempotency_key: idempotency_key, gateway_id: gateway_id
+ assign object = {"to": to, "request_type": 'Delete', "idempotency_key": idempotency_key, "gateway_id": gateway_id}
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/check.liquid
index e535b50..7423300 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/stripe_webhook/delete/check.liquid
@@ -1,13 +1,13 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'request_type'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'idempotency_key'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'gateway_id'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize.liquid
index 9ee8440..3f934c7 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize.liquid
@@ -5,7 +5,7 @@
if object.valid
function stripe_session = 'modules/payments_stripe/commands/stripe_checkout/retrieve', transaction: object.transaction, with_payment_intent: true
if stripe_session.valid
- assign ach_method_types = '["us_bank_account"]' | parse_json
+ assign ach_method_types = ["us_bank_account"]
if stripe_session.payment_intent.payment_method_types != ach_method_types
assign ach_payment = true
endif
@@ -32,7 +32,7 @@
if payment_status
if payment_status != transaction.status.name
- assign input = null | hash_merge: payment_status: payment_status
+ assign input = {"payment_status": payment_status}
function object = 'modules/payments/commands/transactions/update_status', object: input, transaction: object.transaction, requester_id: requester_id
endif
else
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/build.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/build.liquid
index 04098d7..f10c611 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/build.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/build.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = null | hash_merge: transaction: object, transaction_status: object.status.name
+ assign data = {"transaction": object, "transaction_status": object.status.name}
return data
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/check.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/check.liquid
index c537372..8d5b6d4 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/check.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/transaction_finalize/check.liquid
@@ -1,11 +1,13 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
assign new_statuses = 'new' | split: ','
assign transaction_status_short = object.transaction_status | split: '.' | last
function c = 'modules/core/validations/included', c: c, field_name: 'transaction_status', array: new_statuses, value: transaction_status_short
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhook_endpoints/create.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhook_endpoints/create.liquid
index 582749c..426b14b 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhook_endpoints/create.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhook_endpoints/create.liquid
@@ -4,10 +4,10 @@
if object.valid
graphql r = 'modules/payments_stripe/webhook_endpoints/create', args: object
assign object = r['record']
- hash_assign object['valid'] = true
+ assign object.valid = true
else
log object, type: 'ERROR: modules/payments_stripe webhook_endpoints/create'
endif
return object
-%}
+ %}
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/charge.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/charge.liquid
index 64cfdec..926b830 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/charge.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/charge.liquid
@@ -1,7 +1,7 @@
{%- liquid
assign requester_id = 'stripe_webhook_request'
- assign response = null | hash_merge: status: 200
- assign gateway_transaction_ids = params.data.object.id | split: '!!' | array_add: params.data.object.payment_intent | array_compact
+ assign response = {"status": 200}
+ assign gateway_transaction_ids = params.data.object.id | split: '!!' | push: params.data.object.payment_intent | compact
if params.data.object.metadata.transaction_id
function transaction = 'modules/payments/queries/transactions/find', id: params.data.object.metadata.transaction_id
elsif gateway_transaction_ids.size > 0
@@ -11,18 +11,18 @@
function payment_status = 'modules/payments/commands/transactions/map_status', payment_status: params.data.object.status
if transaction == blank and params.data.object.metadata.host contains host
- hash_assign response['status'] = 500
- hash_assign response['body'] = "Transaction not found"
+ assign response.status = 500
+ assign response.body = "Transaction not found"
log params, type: 'ERROR: modules/payments_stripe/commands/webhooks/charge object'
elsif transaction == blank
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Transaction is from a different host"
+ assign response.status = 202
+ assign response.body = "Transaction is from a different host"
elsif transaction and transaction.c__status == payment_status
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Transaction already completed"
+ assign response.status = 202
+ assign response.body = "Transaction already completed"
elsif transaction and params.data.object.metadata.host contains host or params.data.object.metadata.host == blank
function object = 'modules/payments_stripe/commands/stripe_charge/handle_webhook', params: params, requester_id: requester_id, request_url: request_url, transaction: transaction
- hash_assign response['body'] = object
+ assign response.body = object
endif
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/connected_account.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/connected_account.liquid
index 8362cd7..6501222 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/connected_account.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/connected_account.liquid
@@ -1,14 +1,14 @@
{%- liquid
- assign response = null | hash_merge: status: 200
+ assign response = {"status": 200}
function connected_account = 'modules/payments_stripe/queries/connected_accounts/find_by_account_id', account_id: params.account
if connected_account == blank
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Account is from a different host"
+ assign response.status = 202
+ assign response.body = "Account is from a different host"
else
function object = 'modules/payments_stripe/commands/stripe_connected_accounts/handle_webhook', params: params, connected_account: connected_account
- hash_assign response['body'] = object
+ assign response.body = object
endif
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/is_valid.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/is_valid.liquid
index 0350b8a..7fe9370 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/is_valid.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/is_valid.liquid
@@ -1,6 +1,8 @@
{% liquid
assign webhook_listen_url = "https://" | append: context.location.host | append: webhook_path
+ # platformos-check-disable GraphQLVariablesCheck
graphql g = 'modules/payments_stripe/webhook_endpoints/search', livemode: context.exports.payment.livemode, url: webhook_listen_url, stripe_account_name: stripe_account_name
+ # platformos-check-enable GraphQLVariablesCheck
assign last_webhook_config = g.webhook_endpoints.results.last
if last_webhook_config.id == blank
if context.constants.DEBUG == "true"
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/payout.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/payout.liquid
index c0c77de..ef2678a 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/payout.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/payout.liquid
@@ -1,14 +1,14 @@
{%- liquid
- assign response = null | hash_merge: status: 200
+ assign response = {"status": 200}
function connected_account = 'modules/payments_stripe/queries/connected_accounts/find_by_account_id', account_id: params.account
if connected_account == blank
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Payout is from a different host"
+ assign response.status = 202
+ assign response.body = "Payout is from a different host"
else
function object = 'modules/payments_stripe/commands/payouts/handle_webhook', params: params, request_url: request_url, connected_account: connected_account
- hash_assign response['body'] = object
+ assign response.body = object
endif
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/session_expired.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/session_expired.liquid
index 7919639..9f3d880 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/session_expired.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/session_expired.liquid
@@ -1,22 +1,22 @@
{%- liquid
assign requester_id = 'stripe_webhook_request'
- assign response = null | hash_merge: status: 200
+ assign response = {"status": 200}
- assign gateway_transaction_ids = params.data.object.id | split: '!!' | array_add: params.data.object.payment_intent
+ assign gateway_transaction_ids = params.data.object.id | split: '!!' | push: params.data.object.payment_intent
function transactions = 'modules/payments/queries/transactions/search', gateway_transaction_ids: gateway_transaction_ids, limit: 1
assign transaction = transactions.results[0]
if transaction == blank and params.data.object.success_url contains host
- hash_assign response['status'] = 500
- hash_assign response['body'] = "Transaction not found"
+ assign response.status = 500
+ assign response.body = "Transaction not found"
log params, type: 'ERROR: modules/payments_stripe/commands/webhooks/session_expired object'
elsif transaction == blank
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Transaction is from a different host"
+ assign response.status = 202
+ assign response.body = "Transaction is from a different host"
else
function object = 'modules/payments_stripe/commands/stripe_checkout/handle_webhook', params: params, transaction: transaction, requester_id: requester_id, request_url: request_url
- hash_assign response['body'] = object
+ assign response.body = object
endif
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/setup_intent.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/setup_intent.liquid
index 5dfaa4e..d2ba8d8 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/setup_intent.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/commands/webhooks/setup_intent.liquid
@@ -1,20 +1,20 @@
{%- liquid
assign requester_id = 'stripe_webhook_request'
- assign response = null | hash_merge: status: 200
+ assign response = {"status": 200}
function setup_intents = 'modules/payments_stripe/queries/setup_intents/search', gateway_id: params.data.object.id, limit: 1
assign setup_intent = setup_intents.results[0]
if setup_intent == blank and params.data.object.metadata.host contains host
- hash_assign response['status'] = 500
- hash_assign response['body'] = "Setup Intent not found"
+ assign response.status = 500
+ assign response.body = "Setup Intent not found"
log params, type: 'ERROR: modules/payments_stripe/commands/webhooks/setup_intent object'
elsif setup_intent == blank
- hash_assign response['status'] = 202
- hash_assign response['body'] = "Setup Intent is from a different host"
+ assign response.status = 202
+ assign response.body = "Setup Intent is from a different host"
else
function object = 'modules/payments_stripe/commands/stripe_setup_intent/handle_webhook', params: params, requester_id: requester_id, request_url: request_url, setup_intent: setup_intent
- hash_assign response['body'] = object
+ assign response.body = object
endif
return response
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_deleted.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_deleted.liquid
index 9bb92ba..242c906 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_deleted.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_deleted.liquid
@@ -5,7 +5,7 @@ metadata:
reference_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'connected_account_id'
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id'
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_updated.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_updated.liquid
index 061557c..45fcfeb 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_updated.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_connected_account_updated.liquid
@@ -6,7 +6,7 @@ metadata:
account_state
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'connected_account_id'
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id'
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_payout_paid.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_payout_paid.liquid
index ea42f3a..e9c967c 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_payout_paid.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_payout_paid.liquid
@@ -7,7 +7,7 @@ metadata:
reference_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'payout_id'
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'connected_account_id'
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_setup_intent_succeeded.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_setup_intent_succeeded.liquid
index 1e8236c..bd68ff5 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_setup_intent_succeeded.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/events/payments_stripe_setup_intent_succeeded.liquid
@@ -5,7 +5,7 @@ metadata:
payment_method_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'setup_intent_id'
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'payment_method_id'
diff --git a/pos-module-payments-stripe/modules/payments_stripe/public/lib/helpers/pay_object.liquid b/pos-module-payments-stripe/modules/payments_stripe/public/lib/helpers/pay_object.liquid
index 05cc5c8..1594e46 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/public/lib/helpers/pay_object.liquid
+++ b/pos-module-payments-stripe/modules/payments_stripe/public/lib/helpers/pay_object.liquid
@@ -30,7 +30,7 @@ Possible payment_mode:
function object = 'modules/payments_stripe/commands/stripe_checkout/create', object: gateway_params, transaction: transaction
assign gateway_transaction_id = object.payment_intent | default: object.setup_intent
endcase
- assign transaction_object = null | hash_merge: id: transaction.id, gateway_transaction_id: gateway_transaction_id, c__status: transaction_status
+ assign transaction_object = {"id": transaction.id, "gateway_transaction_id": gateway_transaction_id, "c__status": transaction_status}
function transaction = 'modules/payments/commands/transactions/update_gateway_transaction_id', object: transaction_object
unless transaction.valid
diff --git a/pos-module-payments-stripe/modules/payments_stripe/template-values.json b/pos-module-payments-stripe/modules/payments_stripe/template-values.json
index 24ade2d..95bcef8 100644
--- a/pos-module-payments-stripe/modules/payments_stripe/template-values.json
+++ b/pos-module-payments-stripe/modules/payments_stripe/template-values.json
@@ -2,9 +2,9 @@
"name": "pOS Payments Stripe",
"machine_name": "payments_stripe",
"type": "module",
- "version": "1.2.1",
+ "version": "1.3.0",
"dependencies": {
- "core": "^1.3.0",
+ "core": "^2.1.0",
"payments": "0.2.6"
}
}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/execute.liquid b/pos-module-payments/modules/payments/public/lib/commands/execute.liquid
index 4a72367..82edf8c 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/execute.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/execute.liquid
@@ -4,6 +4,6 @@
graphql r = mutation_name, args: object
assign object = r[selection]
- hash_assign object['valid'] = true
+ assign object.valid = true
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/build.liquid b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/build.liquid
index 92662c9..4adb5a2 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/build.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/build.liquid
@@ -1,6 +1,6 @@
{% liquid
assign request_data = object | json
- assign data = null | hash_merge: external_id: external_id, name: name, request_data: request_data, request_url: request_url, gateway_object_id: object.id, stripe_account_name: stripe_account_name
+ assign data = {"external_id": external_id, "name": name, "request_data": request_data, "request_url": request_url, "gateway_object_id": object.id, "stripe_account_name": stripe_account_name}
return data
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/check.liquid
index 6bc237e..076208f 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/receive/check.liquid
@@ -1,12 +1,14 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'external_id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'request_data'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'request_url'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/build.liquid b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/build.liquid
index 01ce52d..152abb7 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/build.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/build.liquid
@@ -2,10 +2,10 @@
assign request_data = object | json
assign url = object.to
- assign gateway_request = null | hash_merge: external_id: external_id, name: name, request_url: url, request_data: request_data, api_call_template: template, stripe_account_name: object.payload.stripe_account_name
- assign api_call = null | hash_merge: template: template, data: object
+ assign gateway_request = {"external_id": external_id, "name": name, "request_url": url, "request_data": request_data, "api_call_template": template, "stripe_account_name": object.payload.stripe_account_name}
+ assign api_call = {"template": template, "data": object}
- assign data = null | hash_merge: api_call: api_call, gateway_request: gateway_request
+ assign data = {"api_call": api_call, "gateway_request": gateway_request}
return data
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/check.liquid
index ad6fa37..f899c01 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/send/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object.gateway_request, field_name: 'external_id'
function c = 'modules/core/validations/presence', c: c, object: object.gateway_request, field_name: 'request_data'
@@ -10,7 +10,9 @@
function c = 'modules/core/validations/presence', c: c, object: object.api_call, field_name: 'template'
function c = 'modules/core/validations/presence', c: c, object: object.api_call, field_name: 'data'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/update/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/update/check.liquid
index 51addbe..cb57b0f 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/update/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/gateway_requests/update/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'response_status'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/create.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/create.liquid
index 64d1ebc..465f2b6 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/create.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/create.liquid
@@ -5,7 +5,7 @@
if object.valid
function object = 'modules/payments/commands/execute', mutation_name: 'modules/payments/transactions/create' object: object
- assign input = null | hash_merge: payment_status: 'new'
+ assign input = {"payment_status": 'new'}
function _ = 'modules/payments/commands/transactions/update_status', object: input, transaction: object, requester_id: 'system'
else
log object, type: "ERROR modules/payments/commands/transactions/create"
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/create/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/create/check.liquid
index 0daba84..707a597 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/create/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/create/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'payable_ids'
function c = 'modules/core/validations/length', c: c, object: object, field_name: 'payable_ids', minimum: 1, message_minimum: 'app.models.transactions.errors.no_payable_object'
@@ -8,8 +8,8 @@
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'gateway'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'c__status'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/build.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/build.liquid
index f704bf3..2b04142 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/build.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/build.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign object = null | hash_merge: id: id, c__status: status
+ assign object = {"id": id, "c__status": status}
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/check.liquid
index 322c304..b85303a 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/set_status_cache/check.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'c__status'
@@ -7,8 +7,8 @@
assign valid_statuses = 'app.statuses.transactions.new,app.statuses.transactions.pending,app.statuses.transactions.succeeded,app.statuses.transactions.expired,app.statuses.transactions.failed' | split: ','
function c = 'modules/core/validations/included', c: c, object: object, field_name: 'c__status', array: valid_statuses
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/build.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/build.liquid
index 2a9a621..209cad1 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/build.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/build.liquid
@@ -1,8 +1,8 @@
{% liquid
- assign data = null | hash_merge: id: object.id, gateway_transaction_id: object.gateway_transaction_id
+ assign data = {"id": object.id, "gateway_transaction_id": object.gateway_transaction_id}
if object.c__status
- hash_assign data['c__status'] = object.c__status
+ assign data.c__status = object.c__status
endif
return data
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/check.liquid
index 28fdebb..4059151 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_gateway_transaction_id/check.liquid
@@ -1,10 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'gateway_transaction_id'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status.liquid
index 8b87af6..d597988 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status.liquid
@@ -6,7 +6,7 @@
if object.valid and object.c__status != transaction.c__status
function object = 'modules/core/commands/execute', mutation_name: 'modules/payments/transactions/update' object: object
- assign event_payload = null | hash_merge: transaction_id: object.id
+ assign event_payload = {"transaction_id": object.id}
assign type = object.c__status | remove: 'app.statuses.transactions.' | prepend: 'payments_transaction_' | replace: '.', '_'
function _ = 'modules/core/commands/events/publish', type: type, object: event_payload
function _ = 'modules/core/commands/statuses/create', name: object.c__status, reference_id: object.id, requester_id: requester_id, reference_schema: 'modules/payments/transaction', payload: request_payload
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/build.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/build.liquid
index 8a15d48..407fab1 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/build.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/build.liquid
@@ -1,6 +1,6 @@
{% liquid
function status = 'modules/payments/commands/transactions/map_status', payment_status: object.payment_status
- assign data = null | hash_merge: id: transaction.id, c__status: status, gateway_transaction_id: object.gateway_transaction_id
+ assign data = {"id": transaction.id, "c__status": status, "gateway_transaction_id": object.gateway_transaction_id}
return data
%}
diff --git a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/check.liquid b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/check.liquid
index 63323dc..41b6e85 100644
--- a/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/check.liquid
+++ b/pos-module-payments/modules/payments/public/lib/commands/transactions/update_status/check.liquid
@@ -1,11 +1,11 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'c__status'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_expired.liquid b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_expired.liquid
index 276a5d6..8ee0780 100644
--- a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_expired.liquid
+++ b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_expired.liquid
@@ -4,7 +4,7 @@ metadata:
transaction_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'transaction_id'
diff --git a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_failed.liquid b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_failed.liquid
index 276a5d6..8ee0780 100644
--- a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_failed.liquid
+++ b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_failed.liquid
@@ -4,7 +4,7 @@ metadata:
transaction_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'transaction_id'
diff --git a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_new.liquid b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_new.liquid
index 276a5d6..8ee0780 100644
--- a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_new.liquid
+++ b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_new.liquid
@@ -4,7 +4,7 @@ metadata:
transaction_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'transaction_id'
diff --git a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_pending.liquid b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_pending.liquid
index 276a5d6..8ee0780 100644
--- a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_pending.liquid
+++ b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_pending.liquid
@@ -4,7 +4,7 @@ metadata:
transaction_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'transaction_id'
diff --git a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_succeeded.liquid b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_succeeded.liquid
index 276a5d6..8ee0780 100644
--- a/pos-module-payments/modules/payments/public/lib/events/payments_transaction_succeeded.liquid
+++ b/pos-module-payments/modules/payments/public/lib/events/payments_transaction_succeeded.liquid
@@ -4,7 +4,7 @@ metadata:
transaction_id
---
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'transaction_id'
diff --git a/pos-module-payments/modules/payments/public/lib/tests/gateway_requests/receive_test.liquid b/pos-module-payments/modules/payments/public/lib/tests/gateway_requests/receive_test.liquid
index 1f21759..c0887e0 100644
--- a/pos-module-payments/modules/payments/public/lib/tests/gateway_requests/receive_test.liquid
+++ b/pos-module-payments/modules/payments/public/lib/tests/gateway_requests/receive_test.liquid
@@ -1,5 +1,5 @@
{% liquid
- assign data = '{ "foo": "bar" }' | parse_json
+ assign data = { "foo": "bar" }
assign url = "https://{{ context.location.host }}/payments/webhook"
function object = 'modules/payments/commands/gateway_requests/receive', object: data, name: 'webhook_payment_finished', external_id: "5", request_url: url
diff --git a/pos-module-payments/modules/payments/public/lib/tests/transactions/update_gateway_transaction_id_test.liquid b/pos-module-payments/modules/payments/public/lib/tests/transactions/update_gateway_transaction_id_test.liquid
index a3f1c11..f137a5a 100644
--- a/pos-module-payments/modules/payments/public/lib/tests/transactions/update_gateway_transaction_id_test.liquid
+++ b/pos-module-payments/modules/payments/public/lib/tests/transactions/update_gateway_transaction_id_test.liquid
@@ -1,7 +1,7 @@
{% liquid
- assign transaction_object = null | hash_merge: gateway: 'example', payable_ids: "1", currency: "USD", amount_cents: 12000
+ assign transaction_object = {"gateway": 'example', "payable_ids": "1", "currency": "USD", "amount_cents": 12000}
function transaction = 'modules/payments/commands/transactions/create', object: transaction_object
- assign object = null | hash_merge: id: transaction.id, gateway_transaction_id: '12345'
+ assign object = {"id": transaction.id, "gateway_transaction_id": '12345'}
function object = 'modules/payments/commands/transactions/update_gateway_transaction_id', object: object
diff --git a/pos-module-reports/app/lib/commands/profiles/export_all.liquid b/pos-module-reports/app/lib/commands/profiles/export_all.liquid
index f1a7f6d..118a1de 100644
--- a/pos-module-reports/app/lib/commands/profiles/export_all.liquid
+++ b/pos-module-reports/app/lib/commands/profiles/export_all.liquid
@@ -1,29 +1,27 @@
-{% assign rows = '[]' | parse_json %}
+{% assign rows = [] %}
-{% assign header_row = "id,created_at,updated_at,user_id,avatar,uuid,name,first_name,last_name,slug,email" | split: ',' %}
+{% assign header_row = "id,created_at,user_id,uuid,name,first_name,last_name,email" | split: ',' %}
-{%- assign rows = rows | add_to_array: header_row -%}
+{%- assign rows << header_row -%}
-{%- graphql profiles = 'modules/profile/profiles/search', page: 1, limit: 100 -%}
+{%- graphql profiles = 'modules/user/profiles/search', page: 1, limit: 100 -%}
{%- assign total_pages = profiles.records.total_pages -%}
{%- for i in (1..total_pages) -%}
{%- if i > 1 -%}
- {%- graphql profiles = 'modules/profile/profiles/search', page: i, limit: 100 -%}
+ {% comment %}platformos-check-disable NestedGraphQLQuery{% endcomment %}
+ {%- graphql profiles = 'modules/user/profiles/search', page: i, limit: 100 -%}
{%- endif -%}
{%- for profile in profiles.records.results -%}
- {%- assign row = '[]' | parse_json -%}
- {%- assign row = row | add_to_array: profile.id -%}
- {%- assign row = row | add_to_array: profile.created_at -%}
- {%- assign row = row | add_to_array: profile.updated_at -%}
- {%- assign row = row | add_to_array: profile.properties.user_id -%}
- {%- assign row = row | add_to_array: profile.avatar.photo.versions -%}
- {%- assign row = row | add_to_array: profile.properties.uuid -%}
- {%- assign row = row | add_to_array: profile.properties.name -%}
- {%- assign row = row | add_to_array: profile.properties.first_name -%}
- {%- assign row = row | add_to_array: profile.properties.last_name -%}
- {%- assign row = row | add_to_array: profile.properties.slug -%}
- {%- assign row = row | add_to_array: profile.properties.email -%}
- {%- assign rows = rows | add_to_array: row -%}
+ {%- assign row = [] -%}
+ {%- assign row = row <
Reports module
-
+ {% comment %}platformos-check-disable MissingAsset{% endcomment %}
+
{{ content_for_layout }}
diff --git a/pos-module-reports/app/views/layouts/minimal.liquid b/pos-module-reports/app/views/layouts/minimal.liquid
index facd519..63b0a5b 100644
--- a/pos-module-reports/app/views/layouts/minimal.liquid
+++ b/pos-module-reports/app/views/layouts/minimal.liquid
@@ -2,7 +2,8 @@
Reports module
-
+ {% comment %}platformos-check-disable MissingAsset{% endcomment %}
+
{{ content_for_layout }}
diff --git a/pos-module-reports/app/views/pages/admin/reports/download.liquid b/pos-module-reports/app/views/pages/admin/reports/download.liquid
index 95141d5..2df468b 100644
--- a/pos-module-reports/app/views/pages/admin/reports/download.liquid
+++ b/pos-module-reports/app/views/pages/admin/reports/download.liquid
@@ -5,7 +5,7 @@ method: post
---
{% liquid
- assign report_id = params.report_id
+ assign report_id = context.params.report_id
graphql report = 'modules/reports/reports/search', id: report_id, include_documents: true
assign document_url = report.reports.results.first.documents.first.file.url
%}
diff --git a/pos-module-reports/app/views/pages/admin/reports/list.liquid b/pos-module-reports/app/views/pages/admin/reports/list.liquid
index fe1761e..e0a3b98 100644
--- a/pos-module-reports/app/views/pages/admin/reports/list.liquid
+++ b/pos-module-reports/app/views/pages/admin/reports/list.liquid
@@ -8,8 +8,8 @@ slug: admin/reports/list
{% endif %}
{% assign page = context.params.page | default: 1 | plus: 0 %}
-{% assign operation_models = '[]' | parse_json %}
-{% assign operation_models = operation_models | add_to_array: params.type %}
+{% assign operation_models = [] %}
+{% assign operation_models << context.params.type %}
{% graphql operations = 'modules/reports/reports/search', limit: 10, page: page, operation_models: operation_models %}
-{% render 'admin/reports/list', operations: operations, page: page, type: context.params.type %}
+{% render 'admin/reports/list', operations: operations, type: context.params.type %}
diff --git a/pos-module-reports/app/views/pages/admin/reports/profiles.liquid b/pos-module-reports/app/views/pages/admin/reports/profiles.liquid
index edccaa1..7144968 100644
--- a/pos-module-reports/app/views/pages/admin/reports/profiles.liquid
+++ b/pos-module-reports/app/views/pages/admin/reports/profiles.liquid
@@ -3,19 +3,19 @@ layout: default
slug: admin/reports/profiles
method: post
---
-{% function admin_user = 'modules/user/queries/user/find', email: 'alex.admin@example.com' %}
-{% function admin_user_profile = 'modules/profile/queries/profiles/find', user_id: admin_user.id %}
+{% function admin_user = 'modules/user/queries/user/find', email: 'alex.admin@example.com', id: null, with_token: null %}
+{% function admin_user_profile = 'modules/user/queries/profiles/find', user_id: admin_user.id, id: null, first_name: null, last_name: null, uuid: null %}
{% liquid
assign operation_uuid = '' | uuid
- assign object = '{}' | parse_json | hash_merge: uuid: operation_uuid, creator_id: admin_user_profile.id, user_id: admin_user_profile.user_id, operation_type: 'export_profiles', operation_model: 'profile', options: '{}', retrieve_all_command: 'commands/profiles/export_all'
+ assign object = {"uuid": operation_uuid, "creator_id": admin_user_profile.id, "user_id": admin_user_profile.user_id, "operation_type": 'export_profiles', "operation_model": 'profile', "options": '{}', "retrieve_all_command": 'commands/profiles/export_all'}
function object = 'modules/reports/commands/reports/create', object: object
if object.valid
- function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.pending', reference_id: object.id, requester_id: 'report'
+ function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.pending', reference_id: object.id, requester_id: 'report', payload: null, delay: null, max_attempts: null, reference_schema: null, timestamp: null
- assign object_payload = '{}' | parse_json | hash_merge: actor_id: admin_user_profile.id, object_id: object.id, app_host: context.location.host
- function _ = 'modules/core/commands/events/publish', type: 'report_requested', object: object_payload
+ assign object_payload = {"actor_id": admin_user_profile.id, "object_id": object.id, "app_host": context.location.host}
+ function _ = 'modules/core/commands/events/publish', type: 'report_requested', object: object_payload, delay: null, max_attempts: null
endif
%}
diff --git a/pos-module-reports/app/views/partials/admin/reports/list.liquid b/pos-module-reports/app/views/partials/admin/reports/list.liquid
index e86c44e..a0a13f9 100644
--- a/pos-module-reports/app/views/partials/admin/reports/list.liquid
+++ b/pos-module-reports/app/views/partials/admin/reports/list.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} type - The report type
+ @param {object} operations - The operations data
+{% enddoc %}
diff --git a/pos-module-reports/modules/core/generators/command/index.js b/pos-module-reports/modules/core/generators/command/index.js
index 329fd3f..29fb67e 100644
--- a/pos-module-reports/modules/core/generators/command/index.js
+++ b/pos-module-reports/modules/core/generators/command/index.js
@@ -1,9 +1,9 @@
-const Generator = require('yeoman-generator');
-const path = require('path');
-const pluralize = require('pluralize');
-const fs = require('fs');
+import Generator from 'yeoman-generator';
+import path from 'path';
+import pluralize from 'pluralize';
+import fs from 'fs';
-module.exports = class extends Generator {
+export default class extends Generator {
constructor(args, opts) {
super(args, opts);
diff --git a/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/build.liquid b/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/build.liquid
index 6a83151..1fc2591 100644
--- a/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/build.liquid
+++ b/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/build.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign data = null | hash_merge: id: object.id, name: object.name
+ assign data = {"id": object.id, "name": object.name}
return data
%}
diff --git a/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/check.liquid b/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/check.liquid
index 8f3da9c..2c53a6c 100644
--- a/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/check.liquid
+++ b/pos-module-reports/modules/core/generators/command/templates/lib/commands/create/check.liquid
@@ -1,10 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-reports/modules/core/generators/crud/index.js b/pos-module-reports/modules/core/generators/crud/index.js
index a97a592..dd839bc 100644
--- a/pos-module-reports/modules/core/generators/crud/index.js
+++ b/pos-module-reports/modules/core/generators/crud/index.js
@@ -1,14 +1,14 @@
-const Generator = require('yeoman-generator');
-const pluralize = require('pluralize');
-const startCase = require('lodash.startcase');
+import Generator from 'yeoman-generator';
+import pluralize from 'pluralize';
+import startCase from 'lodash.startcase';
-module.exports = class extends Generator {
+export default class extends Generator {
constructor(args, opts) {
super(args, opts);
this.description = 'Generate table definition and commands for CRUD with graphql files';
this.argument('modelName', { type: String, required: true, description: 'name of the table' });
- this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: [] });
+ this.argument('attributes', { type: Array, required: false, description: 'table column names with types', default: "[]" });
this.option('include-views', { type: Boolean, default: false, description: 'generate pages and partials', hide: 'no' });
const attributes = this.options.attributes.map((attr) => {
diff --git a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
index df36e79..caf4d8d 100644
--- a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
+++ b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/create/check.liquid
@@ -1,11 +1,12 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
<% attributes.forEach((attr, i) => { -%>
function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
<% }); -%>
- assign object = object | hash_merge: valid: c.valid, errors: c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
index 4ae7fc6..4fada40 100644
--- a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
+++ b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/delete/check.liquid
@@ -1,9 +1,10 @@
{% liquid
- assign c = '{ "valid": true, "errors": {} }' | parse_json
+ assign c = { "valid": true, "errors": {} }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- assign object = object | hash_merge: valid: c.valid, errors: c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
index c991577..cffe564 100644
--- a/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
+++ b/pos-module-reports/modules/core/generators/crud/templates/lib/commands/model/update/check.liquid
@@ -1,12 +1,13 @@
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
<% attributes.forEach((attr, i) => { -%>
function c = 'modules/core/validations/presence', c: c, object: object, field_name: '<%= attr.name %>'
<% }); -%>
- assign object = object | hash_merge: valid: c.valid, errors: c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
%}
diff --git a/pos-module-reports/modules/core/generators/crud/templates/views/pages/model/new.liquid b/pos-module-reports/modules/core/generators/crud/templates/views/pages/model/new.liquid
index cb0e37a..43c1b24 100644
--- a/pos-module-reports/modules/core/generators/crud/templates/views/pages/model/new.liquid
+++ b/pos-module-reports/modules/core/generators/crud/templates/views/pages/model/new.liquid
@@ -1,4 +1,4 @@
{% liquid
- assign object = '{}' | parse_json
+ assign object = {}
render 'theme/simple/<%= modelNamePlural %>/new', object: object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/package-lock.json b/pos-module-reports/modules/core/package-lock.json
index 23048d8..655962c 100644
--- a/pos-module-reports/modules/core/package-lock.json
+++ b/pos-module-reports/modules/core/package-lock.json
@@ -11,192 +11,55 @@
"devDependencies": {
"auto-changelog": "^2.4.0",
"lodash.startcase": "^4.4.0",
- "pluralize": "^8.0.0",
- "yeoman-generator": "^5.9.0"
+ "pluralize": "^8.0.0"
+ },
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
"dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
+ "debug": "^4.1.1"
}
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -209,7 +72,7 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -218,7 +81,7 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -227,513 +90,356 @@
"node": ">= 8"
}
},
- "node_modules/@npmcli/fs": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
- "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==",
- "dev": true,
- "dependencies": {
- "semver": "^7.3.5"
- },
+ "node_modules/@octokit/auth-token": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 18"
}
},
- "node_modules/@npmcli/git": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz",
- "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==",
- "dev": true,
+ "node_modules/@octokit/core": {
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@npmcli/promise-spawn": "^6.0.0",
- "lru-cache": "^7.4.4",
- "npm-pick-manifest": "^8.0.0",
- "proc-log": "^3.0.0",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^2.0.1",
- "semver": "^7.3.5",
- "which": "^3.0.0"
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@npmcli/git/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "engines": {
- "node": ">=12"
+ "node": ">= 18"
}
},
- "node_modules/@npmcli/git/node_modules/which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
+ "node_modules/@octokit/endpoint": {
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/which.js"
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 18"
}
},
- "node_modules/@npmcli/installed-package-contents": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz",
- "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==",
- "dev": true,
+ "node_modules/@octokit/graphql": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
"dependencies": {
- "npm-bundled": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
- },
- "bin": {
- "installed-package-contents": "lib/index.js"
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 18"
}
},
- "node_modules/@npmcli/node-gyp": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
- "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
+ "node_modules/@octokit/openapi-types": {
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
},
- "node_modules/@npmcli/promise-spawn": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz",
- "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==",
- "dev": true,
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
+ "license": "MIT",
"dependencies": {
- "which": "^3.0.0"
+ "@octokit/types": "^13.10.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
}
},
- "node_modules/@npmcli/promise-spawn/node_modules/which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/which.js"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "@octokit/openapi-types": "^24.2.0"
}
},
- "node_modules/@npmcli/run-script": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz",
- "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==",
- "dev": true,
- "dependencies": {
- "@npmcli/node-gyp": "^3.0.0",
- "@npmcli/promise-spawn": "^6.0.0",
- "node-gyp": "^9.0.0",
- "read-package-json-fast": "^3.0.0",
- "which": "^3.0.0"
- },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
}
},
- "node_modules/@npmcli/run-script/node_modules/which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
+ "license": "MIT",
"dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/which.js"
+ "@octokit/types": "^13.10.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@octokit/auth-token": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
- "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
- "dev": true,
- "dependencies": {
- "@octokit/types": "^6.0.3"
- }
- },
- "node_modules/@octokit/core": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
- "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
- "dev": true,
- "dependencies": {
- "@octokit/auth-token": "^2.4.4",
- "@octokit/graphql": "^4.5.8",
- "@octokit/request": "^5.6.3",
- "@octokit/request-error": "^2.0.5",
- "@octokit/types": "^6.0.3",
- "before-after-hook": "^2.2.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/endpoint": {
- "version": "6.0.12",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
- "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
- "dev": true,
- "dependencies": {
- "@octokit/types": "^6.0.3",
- "is-plain-object": "^5.0.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/graphql": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
- "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
- "dev": true,
- "dependencies": {
- "@octokit/request": "^5.6.0",
- "@octokit/types": "^6.0.3",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/openapi-types": {
- "version": "12.11.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
- "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==",
- "dev": true
- },
- "node_modules/@octokit/plugin-paginate-rest": {
- "version": "2.21.3",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
- "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
- "dev": true,
- "dependencies": {
- "@octokit/types": "^6.40.0"
+ "node": ">= 18"
},
"peerDependencies": {
- "@octokit/core": ">=2"
+ "@octokit/core": ">=6"
}
},
- "node_modules/@octokit/plugin-request-log": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
- "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
- "dev": true,
- "peerDependencies": {
- "@octokit/core": ">=3"
- }
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
+ "license": "MIT"
},
- "node_modules/@octokit/plugin-rest-endpoint-methods": {
- "version": "5.16.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
- "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
- "dev": true,
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^6.39.0",
- "deprecation": "^2.3.1"
- },
- "peerDependencies": {
- "@octokit/core": ">=3"
+ "@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/request": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
- "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
- "dev": true,
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/endpoint": "^6.0.1",
- "@octokit/request-error": "^2.1.0",
- "@octokit/types": "^6.16.1",
- "is-plain-object": "^5.0.0",
- "node-fetch": "^2.6.7",
- "universal-user-agent": "^6.0.0"
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
"node_modules/@octokit/request-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
- "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
- "dev": true,
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^6.0.3",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
"node_modules/@octokit/rest": {
- "version": "18.12.0",
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
- "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
- "dev": true,
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
+ "license": "MIT",
"dependencies": {
- "@octokit/core": "^3.5.1",
- "@octokit/plugin-paginate-rest": "^2.16.8",
- "@octokit/plugin-request-log": "^1.0.4",
- "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
"node_modules/@octokit/types": {
- "version": "6.41.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz",
- "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
- "dev": true,
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
"dependencies": {
- "@octokit/openapi-types": "^12.11.0"
+ "@octokit/openapi-types": "^25.1.0"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true,
+ "node_modules/@pnpm/config.env-replace": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==",
+ "license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=12.22.0"
}
},
- "node_modules/@sigstore/bundle": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz",
- "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==",
- "dev": true,
+ "node_modules/@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
+ "license": "MIT",
"dependencies": {
- "@sigstore/protobuf-specs": "^0.2.0"
+ "graceful-fs": "4.2.10"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@sigstore/protobuf-specs": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz",
- "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=12.22.0"
}
},
- "node_modules/@sigstore/sign": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz",
- "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==",
- "dev": true,
+ "node_modules/@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
+ "license": "MIT",
"dependencies": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "make-fetch-happen": "^11.0.1"
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=12"
}
},
- "node_modules/@sigstore/tuf": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz",
- "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==",
- "dev": true,
- "dependencies": {
- "@sigstore/protobuf-specs": "^0.2.0",
- "tuf-js": "^1.1.7"
- },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true,
- "engines": {
- "node": ">= 10"
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/lodash": "*"
}
},
- "node_modules/@tufjs/canonical-json": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz",
- "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node_modules/@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~7.16.0"
}
},
- "node_modules/@tufjs/models": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz",
- "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==",
- "dev": true,
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
+ "license": "MIT",
"dependencies": {
- "@tufjs/canonical-json": "1.0.0",
- "minimatch": "^9.0.0"
- },
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.13.0 || >=18.12.0"
}
},
- "node_modules/@tufjs/models/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
- },
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz",
- "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==",
- "dev": true
- },
- "node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
+ "node_modules/@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agentkeepalive": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
- "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
- "dev": true,
- "dependencies": {
- "humanize-ms": "^1.2.1"
+ "node": "^16.13.0 || >=18.12.0"
},
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
+ "peerDependencies": {
+ "@types/node": ">=16.18.26",
+ "@yeoman/adapter": "^1.6.0 || ^2.0.0-beta.0 || ^3.0.0 || ^4.0.0",
+ "mem-fs": "^3.0.0 || ^4.0.0-beta.1",
+ "mem-fs-editor": "^10.0.2 || >=10.0.2"
},
- "engines": {
- "node": ">=8"
+ "peerDependenciesMeta": {
+ "@yeoman/adapter": {
+ "optional": true
+ },
+ "mem-fs": {
+ "optional": true
+ },
+ "mem-fs-editor": {
+ "optional": true
+ }
}
},
- "node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
+ "node_modules/array-differ": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
+ "node_modules/array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "dev": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
- "dev": true
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
},
"node_modules/auto-changelog": {
"version": "2.4.0",
@@ -754,160 +460,101 @@
"node": ">=8.3"
}
},
+ "node_modules/b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "react-native-b4a": "*"
+ },
+ "peerDependenciesMeta": {
+ "react-native-b4a": {
+ "optional": true
+ }
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "license": "MIT"
+ },
+ "node_modules/bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "bare-abort-controller": "*"
+ },
+ "peerDependenciesMeta": {
+ "bare-abort-controller": {
+ "optional": true
+ }
+ }
},
"node_modules/before-after-hook": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
- "dev": true
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
},
"node_modules/binaryextensions": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-4.18.0.tgz",
- "integrity": "sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==",
- "dev": true,
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
"engines": {
- "node": ">=0.8"
+ "node": ">=4"
},
"funding": {
"url": "https://bevry.me/fund"
}
},
"node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/builtins": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
- "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
- "dev": true,
- "dependencies": {
- "semver": "^7.0.0"
- }
- },
- "node_modules/cacache": {
- "version": "17.1.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz",
- "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==",
- "dev": true,
- "dependencies": {
- "@npmcli/fs": "^3.1.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^7.7.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/cacache/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cacache/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "license": "MIT",
"engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true,
- "bin": {
- "color-support": "bin.js"
+ "node": ">=0.8"
}
},
"node_modules/commander": {
@@ -923,25 +570,23 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "license": "MIT"
},
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -951,22 +596,13 @@
"node": ">= 8"
}
},
- "node_modules/dargs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -981,46 +617,32 @@
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4.0.0"
}
},
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
- },
- "node_modules/deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
- "dev": true
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
+ "node_modules/editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
+ "license": "Artistic-2.0",
"dependencies": {
- "path-type": "^4.0.0"
+ "version-range": "^4.15.0"
},
"engines": {
- "node": ">=8"
+ "ecmascript": ">= es5",
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
}
},
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
"node_modules/ejs": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
- "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
- "dev": true,
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
"dependencies": {
"jake": "^10.8.5"
},
@@ -1031,105 +653,81 @@
"node": ">=0.10.0"
}
},
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "dev": true
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
+ "node_modules/events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
+ "license": "Apache-2.0",
"dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
+ "bare-events": "^2.7.0"
}
},
"node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
"merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=16.17"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/exponential-backoff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
- "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
- "dev": true
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
+ "license": "MIT"
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
}
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -1138,7 +736,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"minimatch": "^5.0.1"
}
@@ -1147,7 +745,7 @@
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -1156,10 +754,10 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1167,188 +765,62 @@
"node": ">=8"
}
},
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
+ "node_modules/find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
+ "license": "MIT",
"engines": {
- "node": ">=14"
+ "node": ">=18"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
+ "node_modules/first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ==",
+ "license": "MIT",
"engines": {
- "node": ">=14"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fs-minipass": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
- "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
- "dev": true,
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/fs-minipass/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/gauge/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/gauge/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/gauge/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/gauge/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/github-username": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/github-username/-/github-username-6.0.0.tgz",
- "integrity": "sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==",
- "dev": true,
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
+ "license": "MIT",
"dependencies": {
- "@octokit/rest": "^18.0.6"
+ "@octokit/rest": "^21.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1356,46 +828,31 @@
"node": ">= 6"
}
},
- "node_modules/glob/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "license": "MIT",
"dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "license": "ISC"
},
"node_modules/handlebars": {
"version": "4.7.7",
@@ -1418,241 +875,68 @@
"uglify-js": "^3.1.4"
}
},
- "node_modules/has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
- "dev": true
- },
"node_modules/hosted-git-info": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
- "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^7.5.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
- },
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
+ "license": "ISC",
"dependencies": {
- "agent-base": "6",
- "debug": "4"
+ "lru-cache": "^10.0.1"
},
"engines": {
- "node": ">= 6"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=16.17.0"
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
- "node_modules/ignore-walk": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz",
- "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==",
- "dev": true,
- "dependencies": {
- "minimatch": "^9.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/ignore-walk/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
+ "node_modules/index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+ "license": "MIT",
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=18"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
- "dev": true
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -1660,58 +944,52 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
- "dev": true
- },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true,
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "license": "MIT"
+ },
"node_modules/isbinaryfile": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz",
- "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==",
- "dev": true,
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==",
+ "license": "MIT",
"engines": {
- "node": ">= 14.0.0"
+ "node": ">= 18.0.0"
},
"funding": {
"url": "https://github.com/sponsors/gjtorikian/"
@@ -1721,113 +999,69 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "license": "ISC"
},
- "node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
+ "node_modules/jake": {
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
+ "license": "Apache-2.0",
"dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
+ "async": "^3.2.6",
+ "filelist": "^1.0.4",
+ "picocolors": "^1.1.1"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jake": {
- "version": "10.8.7",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
- "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
- "dev": true,
- "dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
- "filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "bin": {
- "jake": "bin/cli.js"
+ "bin": {
+ "jake": "bin/cli.js"
},
"engines": {
"node": ">=10"
}
},
- "node_modules/jake/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/jake/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz",
- "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==",
- "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
+ },
+ "node_modules/ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
}
},
- "node_modules/jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
- "dev": true,
- "engines": [
- "node >= 0.2.0"
- ]
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
+ "node_modules/latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
+ "license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "package-json": "^10.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
+ "node_modules/lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "license": "MIT"
},
"node_modules/lodash.startcase": {
"version": "4.4.0",
@@ -1836,103 +1070,80 @@
"dev": true
},
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/make-fetch-happen": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
- "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==",
- "dev": true,
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/make-fetch-happen/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "engines": {
- "node": ">=12"
+ "node": ">=18.0.0"
}
},
"node_modules/mem-fs-editor": {
- "version": "9.7.0",
- "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz",
- "integrity": "sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==",
- "dev": true,
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "binaryextensions": "^4.16.0",
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
"commondir": "^1.0.1",
"deep-extend": "^0.6.0",
- "ejs": "^3.1.8",
- "globby": "^11.1.0",
- "isbinaryfile": "^5.0.0",
- "minimatch": "^7.2.0",
- "multimatch": "^5.0.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
"normalize-path": "^3.0.0",
- "textextensions": "^5.13.0"
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
+ },
+ "acceptDependencies": {
+ "isbinaryfile": "^5.0.3"
},
"engines": {
- "node": ">=12.10.0"
+ "node": ">=18.0.0"
},
"peerDependencies": {
- "mem-fs": "^2.1.0"
- },
- "peerDependenciesMeta": {
- "mem-fs": {
- "optional": true
- }
+ "mem-fs": "^4.0.0"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -1940,800 +1151,260 @@
}
},
"node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/minimatch": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
- "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
- "dev": true,
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/minimist": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
- "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
- "dev": true,
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
- "node_modules/minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
+ "node_modules/multimatch": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.0.0"
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-collect/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
+ "node": ">=18"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-fetch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz",
- "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==",
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
"dev": true,
"dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
+ "whatwg-url": "^5.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "4.x || >=6.0.0"
},
- "optionalDependencies": {
- "encoding": "^0.1.13"
- }
- },
- "node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
+ "peerDependencies": {
+ "encoding": "^0.1.0"
},
- "engines": {
- "node": ">= 8"
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
}
},
- "node_modules/minipass-flush/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
+ "node_modules/normalize-package-data": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
+ "license": "BSD-2-Clause",
"dependencies": {
- "yallist": "^4.0.0"
+ "hosted-git-info": "^7.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-license": "^3.0.4"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-json-stream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
- "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==",
- "dev": true,
- "dependencies": {
- "jsonparse": "^1.3.1",
- "minipass": "^3.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
- "node_modules/minipass-json-stream/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dev": true,
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.0.0"
+ "path-key": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-pipeline/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "dev": true,
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.0.0"
+ "mimic-fn": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minipass-sized/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
+ "node_modules/package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
"dev": true,
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "bin": {
+ "parse-github-url": "cli.js"
},
"engines": {
- "node": ">= 8"
+ "node": ">=0.10.0"
}
},
- "node_modules/minizlib/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
+ "node_modules/parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
+ "license": "MIT",
"dependencies": {
- "yallist": "^4.0.0"
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/multimatch": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
- "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
- "dev": true,
- "dependencies": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/multimatch/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
- "node_modules/multimatch/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "license": "MIT",
"engines": {
- "node": "*"
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
"dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">=4"
}
},
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-gyp": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz",
- "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==",
- "dev": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "exponential-backoff": "^3.1.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^11.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": "^12.13 || ^14.13 || >=16"
- }
- },
- "node_modules/node-gyp/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/node-gyp/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/node-gyp/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/nopt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
- "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
- "dev": true,
- "dependencies": {
- "abbrev": "^1.0.0"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz",
- "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^6.0.0",
- "is-core-module": "^2.8.1",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-bundled": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz",
- "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==",
- "dev": true,
- "dependencies": {
- "npm-normalize-package-bin": "^3.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-install-checks": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz",
- "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==",
- "dev": true,
- "dependencies": {
- "semver": "^7.1.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-normalize-package-bin": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
- "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-package-arg": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz",
- "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^6.0.0",
- "proc-log": "^3.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^5.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-packlist": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz",
- "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==",
- "dev": true,
- "dependencies": {
- "ignore-walk": "^6.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-pick-manifest": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz",
- "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==",
- "dev": true,
- "dependencies": {
- "npm-install-checks": "^6.0.0",
- "npm-normalize-package-bin": "^3.0.0",
- "npm-package-arg": "^10.0.0",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-registry-fetch": {
- "version": "14.0.5",
- "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz",
- "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==",
- "dev": true,
- "dependencies": {
- "make-fetch-happen": "^11.0.0",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-json-stream": "^1.0.1",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^10.0.0",
- "proc-log": "^3.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "dev": true,
- "dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pacote": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz",
- "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==",
- "dev": true,
- "dependencies": {
- "@npmcli/git": "^4.0.0",
- "@npmcli/installed-package-contents": "^2.0.1",
- "@npmcli/promise-spawn": "^6.0.1",
- "@npmcli/run-script": "^6.0.0",
- "cacache": "^17.0.0",
- "fs-minipass": "^3.0.0",
- "minipass": "^5.0.0",
- "npm-package-arg": "^10.0.0",
- "npm-packlist": "^7.0.0",
- "npm-pick-manifest": "^8.0.0",
- "npm-registry-fetch": "^14.0.0",
- "proc-log": "^3.0.0",
- "promise-retry": "^2.0.1",
- "read-package-json": "^6.0.0",
- "read-package-json-fast": "^3.0.0",
- "sigstore": "^1.3.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11"
- },
- "bin": {
- "pacote": "lib/bin.js"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/parse-github-url": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
- "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
- "dev": true,
- "bin": {
- "parse-github-url": "cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-json/node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pluralize": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
- "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/proc-log": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
- "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
- "dev": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
- "dev": true
- },
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "dev": true,
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "license": "ISC"
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -2747,237 +1418,128 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
- "node_modules/read-package-json": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz",
- "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==",
- "dev": true,
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
"dependencies": {
- "glob": "^10.2.2",
- "json-parse-even-better-errors": "^3.0.0",
- "normalize-package-data": "^5.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
},
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "bin": {
+ "rc": "cli.js"
}
},
- "node_modules/read-package-json-fast": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
- "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
- "dev": true,
+ "node_modules/read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
+ "license": "MIT",
"dependencies": {
- "json-parse-even-better-errors": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
+ "node": ">=18"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
+ "node_modules/read-pkg": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
+ "license": "MIT",
"dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/read-pkg/node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "node_modules/read-pkg/node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/read-pkg/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true,
+ "node_modules/read-pkg/node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "node": ">=18"
},
- "engines": {
- "node": ">= 6"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
- "dev": true,
+ "node_modules/registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
+ "license": "MIT",
"dependencies": {
- "resolve": "^1.1.6"
+ "@pnpm/npm-conf": "^3.0.2"
},
"engines": {
- "node": ">= 0.10"
+ "node": ">=14"
}
},
- "node_modules/resolve": {
- "version": "1.22.6",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
- "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
- "dev": true,
+ "node_modules/registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
+ "license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "rc": "1.2.8"
},
- "bin": {
- "resolve": "bin/resolve"
+ "engines": {
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "dev": true,
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "license": "ISC"
+ },
+ "node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "license": "MIT",
"engines": {
- "node": ">= 4"
+ "node": ">= 10"
}
},
"node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -2992,220 +1554,93 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "optional": true
- },
"node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "license": "ISC",
"bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shelljs": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
- "dev": true,
- "dependencies": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "bin": {
- "shjs": "bin/shjs"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/shelljs/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/shelljs/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/shelljs/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
+ "semver": "bin/semver.js"
},
"engines": {
- "node": "*"
+ "node": ">=10"
}
},
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/sigstore": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz",
- "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==",
- "dev": true,
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
"dependencies": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "@sigstore/sign": "^1.0.0",
- "@sigstore/tuf": "^1.0.3",
- "make-fetch-happen": "^11.0.1"
- },
- "bin": {
- "sigstore": "bin/sigstore.js"
+ "shebang-regex": "^3.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=8"
}
},
- "node_modules/slash": {
+ "node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "dev": true,
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
"engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "dev": true,
+ "node_modules/simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
+ "license": "MIT",
"dependencies": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
},
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
}
},
- "node_modules/socks-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
- "dev": true,
- "dependencies": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
- },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/sort-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz",
- "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==",
- "dev": true,
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
+ "license": "MIT",
"dependencies": {
- "is-plain-obj": "^2.0.0"
+ "is-plain-obj": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3224,247 +1659,130 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz",
- "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==",
- "dev": true
- },
- "node_modules/ssri": {
- "version": "10.0.5",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz",
- "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==",
- "dev": true,
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/ssri/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
+ "license": "MIT",
"dependencies": {
- "safe-buffer": "~5.2.0"
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
}
},
- "node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
+ "node_modules/strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
+ "license": "MIT",
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "is-utf8": "^0.2.1"
},
"engines": {
- "node": ">=12"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/string-width-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
+ "node_modules/strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
+ "license": "MIT",
"dependencies": {
- "ansi-regex": "^6.0.1"
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
},
"engines": {
- "node": ">=12"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
- "dev": true,
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=0.10.0"
}
},
- "node_modules/tar/node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
+ "node_modules/teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
+ "license": "MIT",
"dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
+ "streamx": "^2.12.5"
}
},
- "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
+ "node_modules/text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
+ "license": "Apache-2.0",
"dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "b4a": "^1.6.4"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
},
"node_modules/textextensions": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-5.16.0.tgz",
- "integrity": "sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==",
- "dev": true,
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "license": "Artistic-2.0",
+ "dependencies": {
+ "editions": "^6.21.0"
+ },
"engines": {
- "node": ">=0.8"
+ "node": ">=4"
},
"funding": {
"url": "https://bevry.me/fund"
@@ -3474,7 +1792,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -3488,27 +1806,16 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
- "node_modules/tuf-js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz",
- "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==",
- "dev": true,
- "dependencies": {
- "@tufjs/models": "1.0.4",
- "debug": "^4.3.4",
- "make-fetch-happen": "^11.1.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true,
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=8"
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/uglify-js": {
@@ -3524,281 +1831,156 @@
"node": ">=0.8.0"
}
},
- "node_modules/unique-filename": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
- "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
- "dev": true,
- "dependencies": {
- "unique-slug": "^4.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
+ "node_modules/undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "license": "MIT"
},
- "node_modules/unique-slug": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
- "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "license": "MIT",
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/universal-user-agent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
- "dev": true
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/validate-npm-package-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
- "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==",
- "dev": true,
- "dependencies": {
- "builtins": "^5.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dev": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "node_modules/wide-align/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wide-align/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/wide-align/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
+ "license": "Apache-2.0",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
- "node_modules/wide-align/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
+ "node_modules/version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
+ "license": "Artistic-2.0",
"engines": {
- "node": ">=8"
+ "node": ">=4"
+ },
+ "funding": {
+ "url": "https://bevry.me/fund"
}
},
- "node_modules/wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
+ "node_modules/vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=10.13.0"
}
},
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
+ "node_modules/vinyl-file": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
- "node_modules/wrap-ansi-cjs/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "isexe": "^2.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "engines": {
- "node": ">=12"
+ "bin": {
+ "node-which": "bin/node-which"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
"node_modules/yeoman-generator": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-5.9.0.tgz",
- "integrity": "sha512-sN1e01Db4fdd8P/n/yYvizfy77HdbwzvXmPxps9Gwz2D24slegrkSn+qyj+0nmZhtFwGX2i/cH29QDrvAFT9Aw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "dargs": "^7.0.0",
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "dependencies": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
"debug": "^4.1.1",
- "execa": "^5.1.1",
- "github-username": "^6.0.0",
- "lodash": "^4.17.11",
- "mem-fs-editor": "^9.0.0",
- "minimist": "^1.2.5",
- "pacote": "^15.2.0",
- "read-pkg-up": "^7.0.1",
- "run-async": "^2.0.0",
- "semver": "^7.2.1",
- "shelljs": "^0.8.5",
- "sort-keys": "^4.2.0",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
"text-table": "^0.2.0"
},
"engines": {
- "node": ">=12.10.0"
+ "node": "^18.17.0 || >=20.5.0"
},
"peerDependencies": {
- "yeoman-environment": "^3.2.0"
+ "@types/node": ">=18.18.5",
+ "@yeoman/types": "^1.1.1",
+ "mem-fs": "^4.0.0"
},
"peerDependenciesMeta": {
- "yeoman-environment": {
+ "@types/node": {
"optional": true
}
}
@@ -3806,155 +1988,37 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"requires": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
},
- "@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
+ "@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "debug": "^4.1.1"
}
},
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- }
+ "@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
},
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -3963,421 +2027,252 @@
"@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
},
"@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
}
},
- "@npmcli/fs": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
- "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==",
- "dev": true,
- "requires": {
- "semver": "^7.3.5"
- }
- },
- "@npmcli/git": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz",
- "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==",
- "dev": true,
- "requires": {
- "@npmcli/promise-spawn": "^6.0.0",
- "lru-cache": "^7.4.4",
- "npm-pick-manifest": "^8.0.0",
- "proc-log": "^3.0.0",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^2.0.1",
- "semver": "^7.3.5",
- "which": "^3.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true
- },
- "which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "@npmcli/installed-package-contents": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz",
- "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==",
- "dev": true,
- "requires": {
- "npm-bundled": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
- }
- },
- "@npmcli/node-gyp": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
- "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
- "dev": true
- },
- "@npmcli/promise-spawn": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz",
- "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==",
- "dev": true,
- "requires": {
- "which": "^3.0.0"
- },
- "dependencies": {
- "which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "@npmcli/run-script": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz",
- "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==",
- "dev": true,
- "requires": {
- "@npmcli/node-gyp": "^3.0.0",
- "@npmcli/promise-spawn": "^6.0.0",
- "node-gyp": "^9.0.0",
- "read-package-json-fast": "^3.0.0",
- "which": "^3.0.0"
- },
- "dependencies": {
- "which": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
- "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
"@octokit/auth-token": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
- "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
- "dev": true,
- "requires": {
- "@octokit/types": "^6.0.3"
- }
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="
},
"@octokit/core": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
- "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
- "dev": true,
+ "version": "6.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.6.tgz",
+ "integrity": "sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==",
+ "peer": true,
"requires": {
- "@octokit/auth-token": "^2.4.4",
- "@octokit/graphql": "^4.5.8",
- "@octokit/request": "^5.6.3",
- "@octokit/request-error": "^2.0.5",
- "@octokit/types": "^6.0.3",
- "before-after-hook": "^2.2.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
}
},
"@octokit/endpoint": {
- "version": "6.0.12",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
- "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
- "dev": true,
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
"requires": {
- "@octokit/types": "^6.0.3",
- "is-plain-object": "^5.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
}
},
"@octokit/graphql": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
- "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
- "dev": true,
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
"requires": {
- "@octokit/request": "^5.6.0",
- "@octokit/types": "^6.0.3",
- "universal-user-agent": "^6.0.0"
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
}
},
"@octokit/openapi-types": {
- "version": "12.11.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
- "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==",
- "dev": true
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="
},
"@octokit/plugin-paginate-rest": {
- "version": "2.21.3",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
- "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
- "dev": true,
+ "version": "11.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+ "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
"requires": {
- "@octokit/types": "^6.40.0"
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
}
},
"@octokit/plugin-request-log": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
- "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
- "dev": true,
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+ "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
"requires": {}
},
"@octokit/plugin-rest-endpoint-methods": {
- "version": "5.16.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
- "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
- "dev": true,
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+ "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
"requires": {
- "@octokit/types": "^6.39.0",
- "deprecation": "^2.3.1"
+ "@octokit/types": "^13.10.0"
+ },
+ "dependencies": {
+ "@octokit/openapi-types": {
+ "version": "24.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+ "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
+ },
+ "@octokit/types": {
+ "version": "13.10.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+ "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
+ "requires": {
+ "@octokit/openapi-types": "^24.2.0"
+ }
+ }
}
},
"@octokit/request": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
- "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
- "dev": true,
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.4.tgz",
+ "integrity": "sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==",
"requires": {
- "@octokit/endpoint": "^6.0.1",
- "@octokit/request-error": "^2.1.0",
- "@octokit/types": "^6.16.1",
- "is-plain-object": "^5.0.0",
- "node-fetch": "^2.6.7",
- "universal-user-agent": "^6.0.0"
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
}
},
"@octokit/request-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
- "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
- "dev": true,
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
"requires": {
- "@octokit/types": "^6.0.3",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
+ "@octokit/types": "^14.0.0"
}
},
"@octokit/rest": {
- "version": "18.12.0",
- "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
- "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
- "dev": true,
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.1.tgz",
+ "integrity": "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==",
"requires": {
- "@octokit/core": "^3.5.1",
- "@octokit/plugin-paginate-rest": "^2.16.8",
- "@octokit/plugin-request-log": "^1.0.4",
- "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ "@octokit/core": "^6.1.4",
+ "@octokit/plugin-paginate-rest": "^11.4.2",
+ "@octokit/plugin-request-log": "^5.3.1",
+ "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
}
},
"@octokit/types": {
- "version": "6.41.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz",
- "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
- "dev": true,
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
"requires": {
- "@octokit/openapi-types": "^12.11.0"
+ "@octokit/openapi-types": "^25.1.0"
}
},
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true
- },
- "@sigstore/bundle": {
+ "@pnpm/config.env-replace": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz",
- "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==",
- "dev": true,
- "requires": {
- "@sigstore/protobuf-specs": "^0.2.0"
- }
- },
- "@sigstore/protobuf-specs": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz",
- "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==",
- "dev": true
- },
- "@sigstore/sign": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz",
- "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==",
- "dev": true,
- "requires": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "make-fetch-happen": "^11.0.1"
- }
+ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz",
+ "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="
},
- "@sigstore/tuf": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz",
- "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==",
- "dev": true,
+ "@pnpm/network.ca-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz",
+ "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==",
"requires": {
- "@sigstore/protobuf-specs": "^0.2.0",
- "tuf-js": "^1.1.7"
+ "graceful-fs": "4.2.10"
}
},
- "@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true
- },
- "@tufjs/canonical-json": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz",
- "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==",
- "dev": true
- },
- "@tufjs/models": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz",
- "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==",
- "dev": true,
+ "@pnpm/npm-conf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz",
+ "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==",
"requires": {
- "@tufjs/canonical-json": "1.0.0",
- "minimatch": "^9.0.0"
- },
- "dependencies": {
- "minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
+ "@pnpm/config.env-replace": "^1.1.0",
+ "@pnpm/network.ca-file": "^1.0.1",
+ "config-chain": "^1.1.11"
}
},
- "@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
+ "@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="
},
- "@types/normalize-package-data": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz",
- "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==",
- "dev": true
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg=="
},
- "abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
+ "@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
},
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
+ "@types/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA=="
},
- "agentkeepalive": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
- "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
- "dev": true,
+ "@types/lodash-es": {
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"requires": {
- "humanize-ms": "^1.2.1"
+ "@types/lodash": "*"
}
},
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
+ "@types/node": {
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "peer": true,
"requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
+ "undici-types": "~7.16.0"
}
},
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
+ "@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
},
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
+ "@types/vinyl": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz",
+ "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==",
"requires": {
- "color-convert": "^2.0.1"
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
}
},
- "aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- }
+ "@yeoman/namespace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/namespace/-/namespace-1.0.1.tgz",
+ "integrity": "sha512-XGdYL0HCoPvrzW7T8bxD6RbCY/B8uvR2jpOzJc/yEwTueKHwoVhjSLjVXkokQAO0LNl8nQFLVZ1aKfr2eFWZeA=="
+ },
+ "@yeoman/types": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@yeoman/types/-/types-1.9.1.tgz",
+ "integrity": "sha512-5BMdA/zMzLv/ahnL1ktaV46nSXorb4sU4kQPQKDhIcK8ERbx9TAbGAE+XAlCXKioNIiOrihYj6gW1d/GEfU9Zw==",
+ "peer": true,
+ "requires": {}
},
"array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz",
+ "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw=="
},
"array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
},
"async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
- "dev": true
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="
},
"auto-changelog": {
"version": "2.4.0",
@@ -4392,127 +2287,61 @@
"semver": "^7.3.5"
}
},
+ "b4a": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz",
+ "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==",
+ "requires": {}
+ },
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bare-events": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
+ "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
+ "requires": {}
},
"before-after-hook": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
- "dev": true
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
},
"binaryextensions": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-4.18.0.tgz",
- "integrity": "sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==",
- "dev": true
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
+ "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
},
"brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"requires": {
"balanced-match": "^1.0.0"
}
},
"braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "builtins": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
- "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
- "dev": true,
- "requires": {
- "semver": "^7.0.0"
- }
- },
- "cacache": {
- "version": "17.1.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz",
- "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==",
- "dev": true,
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"requires": {
- "@npmcli/fs": "^3.1.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^7.7.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true
- },
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
+ "fill-range": "^7.1.1"
}
},
"chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
},
"commander": {
"version": "7.2.0",
@@ -4523,173 +2352,106 @@
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
},
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
- "dargs": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
- "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
- "dev": true
- },
"debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"requires": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
}
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
- "deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
+ "editions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
+ "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
"requires": {
- "path-type": "^4.0.0"
+ "version-range": "^4.15.0"
}
},
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
"ejs": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
- "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
- "dev": true,
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"requires": {
"jake": "^10.8.5"
}
},
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "dev": true,
- "optional": true,
- "requires": {
- "iconv-lite": "^0.6.2"
- }
- },
- "env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true
- },
- "err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
+ "events-universal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz",
+ "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
"requires": {
- "is-arrayish": "^0.2.1"
+ "bare-events": "^2.7.0"
}
},
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
"execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"requires": {
"cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
"merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
}
},
- "exponential-backoff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
- "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
- "dev": true
+ "fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="
+ },
+ "fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
},
"fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
}
},
"fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
"requires": {
"reusify": "^1.0.4"
}
@@ -4698,7 +2460,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
"integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
- "dev": true,
"requires": {
"minimatch": "^5.0.1"
},
@@ -4707,7 +2468,6 @@
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
@@ -4715,182 +2475,61 @@
}
},
"fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"requires": {
"to-regex-range": "^5.0.1"
}
},
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- }
- }
- },
- "fs-minipass": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
- "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
- "dev": true,
- "requires": {
- "minipass": "^7.0.3"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "find-up-simple": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
+ "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="
},
- "gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
+ "first-chunk-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-5.0.0.tgz",
+ "integrity": "sha512-WdHo4ejd2cG2Dl+sLkW79SctU7mUQDfr4s1i26ffOZRs5mgv+BRttIM9gwcq0rDbemo0KlpVPaa3LBVLqPXzcQ=="
},
"get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
},
"github-username": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/github-username/-/github-username-6.0.0.tgz",
- "integrity": "sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==",
- "dev": true,
- "requires": {
- "@octokit/rest": "^18.0.6"
- }
- },
- "glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dev": true,
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/github-username/-/github-username-9.0.0.tgz",
+ "integrity": "sha512-lY7+mymwQUEhRwWTLxieKkxcZkVNnUh8iAGnl30DMB1ZtYODHkMAckZk8Jx5dLQs1YKPYM2ibnzQu02aCLFcYQ==",
"requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
- },
- "dependencies": {
- "minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
+ "@octokit/rest": "^21.1.1"
}
},
"glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
},
"globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
"requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
}
},
"graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"handlebars": {
"version": "4.7.7",
@@ -4905,318 +2544,114 @@
"wordwrap": "^1.0.0"
}
},
- "has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
- "dev": true
- },
"hosted-git-info": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz",
- "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==",
- "dev": true,
- "requires": {
- "lru-cache": "^7.5.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true
- }
- }
- },
- "http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
- },
- "http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
+ "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
"requires": {
- "agent-base": "6",
- "debug": "4"
+ "lru-cache": "^10.0.1"
}
},
"human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
- },
- "humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "dev": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="
},
"ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "ignore-walk": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz",
- "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==",
- "dev": true,
- "requires": {
- "minimatch": "^9.0.0"
- },
- "dependencies": {
- "minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
- "dev": true
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="
},
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "index-to-position": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
+ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="
},
- "is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
},
"is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
},
- "is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
- "dev": true
- },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="
},
- "is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true
+ "is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="
},
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q=="
},
"isbinaryfile": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz",
- "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==",
- "dev": true
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.3.tgz",
+ "integrity": "sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g=="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"jake": {
- "version": "10.8.7",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
- "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
- "dev": true,
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
"requires": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
+ "async": "^3.2.6",
"filelist": "^1.0.4",
- "minimatch": "^3.1.2"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
+ "picocolors": "^1.1.1"
}
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
- "json-parse-even-better-errors": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz",
- "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==",
- "dev": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
- "dev": true
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
},
- "lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "ky": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz",
+ "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="
},
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
+ "latest-version": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-9.0.0.tgz",
+ "integrity": "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==",
"requires": {
- "p-locate": "^4.1.0"
+ "package-json": "^10.0.0"
}
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
+ "lodash-es": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
+ "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg=="
},
"lodash.startcase": {
"version": "4.4.0",
@@ -5225,306 +2660,95 @@
"dev": true
},
"lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
},
- "make-fetch-happen": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
- "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==",
- "dev": true,
+ "mem-fs": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-4.1.3.tgz",
+ "integrity": "sha512-+2zSUVKcDWgcF90mPPwyH4J814uRI1PJcVt2RZ4/E8VggPEiIEL7ikMTlPR91P2ZySkyPgD0YGrccwo55SZvnw==",
+ "peer": true,
"requires": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
- "http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
- "ssri": "^10.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true
- }
+ "@types/node": ">=18",
+ "@types/vinyl": "^2.0.12",
+ "vinyl": "^3.0.0",
+ "vinyl-file": "^5.0.0"
}
},
"mem-fs-editor": {
- "version": "9.7.0",
- "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz",
- "integrity": "sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==",
- "dev": true,
- "requires": {
- "binaryextensions": "^4.16.0",
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-11.1.4.tgz",
+ "integrity": "sha512-Z4QX14Ev6eOVTuVSayS5rdiOua6C3gHcFw+n9Qc7WiaVTbC+H8b99c32MYGmbQN9UFHJeI/p3lf3LAxiIzwEmA==",
+ "peer": true,
+ "requires": {
+ "@types/ejs": "^3.1.4",
+ "@types/node": ">=18",
+ "binaryextensions": "^6.11.0",
"commondir": "^1.0.1",
"deep-extend": "^0.6.0",
- "ejs": "^3.1.8",
- "globby": "^11.1.0",
- "isbinaryfile": "^5.0.0",
- "minimatch": "^7.2.0",
- "multimatch": "^5.0.0",
+ "ejs": "^3.1.10",
+ "globby": "^14.0.2",
+ "isbinaryfile": "5.0.3",
+ "minimatch": "^9.0.3",
+ "multimatch": "^7.0.0",
"normalize-path": "^3.0.0",
- "textextensions": "^5.13.0"
+ "textextensions": "^6.11.0",
+ "vinyl": "^3.0.0"
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
},
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
},
"micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"requires": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
}
},
"mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
},
"minimatch": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
- "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
- "dev": true,
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"requires": {
"brace-expansion": "^2.0.1"
}
},
"minimist": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
- "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
- "dev": true
- },
- "minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true
- },
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "minipass-fetch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz",
- "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==",
- "dev": true,
- "requires": {
- "encoding": "^0.1.13",
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "minipass-json-stream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
- "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==",
- "dev": true,
- "requires": {
- "jsonparse": "^1.3.1",
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
},
"ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"multimatch": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
- "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
- "dev": true,
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz",
+ "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==",
"requires": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
+ "array-differ": "^4.0.0",
+ "array-union": "^3.0.1",
+ "minimatch": "^9.0.3"
}
},
- "negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "dev": true
- },
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
@@ -5540,77 +2764,12 @@
"whatwg-url": "^5.0.0"
}
},
- "node-gyp": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz",
- "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==",
- "dev": true,
- "requires": {
- "env-paths": "^2.2.0",
- "exponential-backoff": "^3.1.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^11.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "nopt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
- "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
- "dev": true,
- "requires": {
- "abbrev": "^1.0.0"
- }
- },
"normalize-package-data": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz",
- "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==",
- "dev": true,
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
+ "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
"requires": {
- "hosted-git-info": "^6.0.0",
- "is-core-module": "^2.8.1",
+ "hosted-git-info": "^7.0.0",
"semver": "^7.3.5",
"validate-npm-package-license": "^3.0.4"
}
@@ -5618,177 +2777,40 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npm-bundled": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz",
- "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==",
- "dev": true,
- "requires": {
- "npm-normalize-package-bin": "^3.0.0"
- }
- },
- "npm-install-checks": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz",
- "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==",
- "dev": true,
- "requires": {
- "semver": "^7.1.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
- "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
- "dev": true
- },
- "npm-package-arg": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz",
- "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^6.0.0",
- "proc-log": "^3.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-name": "^5.0.0"
- }
- },
- "npm-packlist": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz",
- "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==",
- "dev": true,
- "requires": {
- "ignore-walk": "^6.0.0"
- }
- },
- "npm-pick-manifest": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz",
- "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==",
- "dev": true,
- "requires": {
- "npm-install-checks": "^6.0.0",
- "npm-normalize-package-bin": "^3.0.0",
- "npm-package-arg": "^10.0.0",
- "semver": "^7.3.5"
- }
- },
- "npm-registry-fetch": {
- "version": "14.0.5",
- "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz",
- "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==",
- "dev": true,
- "requires": {
- "make-fetch-happen": "^11.0.0",
- "minipass": "^5.0.0",
- "minipass-fetch": "^3.0.0",
- "minipass-json-stream": "^1.0.1",
- "minizlib": "^2.1.2",
- "npm-package-arg": "^10.0.0",
- "proc-log": "^3.0.0"
- }
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"requires": {
- "wrappy": "1"
+ "path-key": "^4.0.0"
+ },
+ "dependencies": {
+ "path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="
+ }
}
},
"onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"requires": {
- "aggregate-error": "^3.0.0"
+ "mimic-fn": "^4.0.0"
}
},
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "pacote": {
- "version": "15.2.0",
- "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz",
- "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==",
- "dev": true,
+ "package-json": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz",
+ "integrity": "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==",
"requires": {
- "@npmcli/git": "^4.0.0",
- "@npmcli/installed-package-contents": "^2.0.1",
- "@npmcli/promise-spawn": "^6.0.1",
- "@npmcli/run-script": "^6.0.0",
- "cacache": "^17.0.0",
- "fs-minipass": "^3.0.0",
- "minipass": "^5.0.0",
- "npm-package-arg": "^10.0.0",
- "npm-packlist": "^7.0.0",
- "npm-pick-manifest": "^8.0.0",
- "npm-registry-fetch": "^14.0.0",
- "proc-log": "^3.0.0",
- "promise-retry": "^2.0.1",
- "read-package-json": "^6.0.0",
- "read-package-json-fast": "^3.0.0",
- "sigstore": "^1.3.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11"
+ "ky": "^1.2.0",
+ "registry-auth-token": "^5.0.2",
+ "registry-url": "^6.0.1",
+ "semver": "^7.6.0"
}
},
"parse-github-url": {
@@ -5797,79 +2819,35 @@
"integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
"dev": true
},
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "dependencies": {
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- }
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dev": true,
+ "parse-json": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
"requires": {
- "lru-cache": "^9.1.1 || ^10.0.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
- "dev": true
- }
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
}
},
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
"path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ=="
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"pluralize": {
"version": "8.0.0",
@@ -5877,246 +2855,104 @@
"integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
"dev": true
},
- "proc-log": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
- "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
- "dev": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
- "dev": true
- },
- "promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "dev": true,
- "requires": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- }
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="
},
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
},
- "read-package-json": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz",
- "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==",
- "dev": true,
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"requires": {
- "glob": "^10.2.2",
- "json-parse-even-better-errors": "^3.0.0",
- "normalize-package-data": "^5.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
}
},
- "read-package-json-fast": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
- "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
- "dev": true,
+ "read-package-up": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
+ "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
"requires": {
- "json-parse-even-better-errors": "^3.0.0",
- "npm-normalize-package-bin": "^3.0.0"
+ "find-up-simple": "^1.0.0",
+ "read-pkg": "^9.0.0",
+ "type-fest": "^4.6.0"
}
},
"read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
+ "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
"requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
+ "@types/normalize-package-data": "^2.4.3",
+ "normalize-package-data": "^6.0.0",
+ "parse-json": "^8.0.0",
+ "type-fest": "^4.6.0",
+ "unicorn-magic": "^0.1.0"
},
"dependencies": {
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
+ "unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="
}
}
},
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
+ "registry-auth-token": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
+ "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==",
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "@pnpm/npm-conf": "^3.0.2"
}
},
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
- "dev": true,
+ "registry-url": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz",
+ "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==",
"requires": {
- "resolve": "^1.1.6"
+ "rc": "1.2.8"
}
},
- "resolve": {
- "version": "1.22.6",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
- "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
},
- "retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "dev": true
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug=="
},
"reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
},
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"requires": {
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "optional": true
- },
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
@@ -6124,114 +2960,34 @@
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "shelljs": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
- "dev": true,
- "requires": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
},
"signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
},
- "sigstore": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz",
- "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==",
- "dev": true,
+ "simple-git": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz",
+ "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==",
"requires": {
- "@sigstore/bundle": "^1.1.0",
- "@sigstore/protobuf-specs": "^0.2.0",
- "@sigstore/sign": "^1.0.0",
- "@sigstore/tuf": "^1.0.3",
- "make-fetch-happen": "^11.0.1"
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.4.0"
}
},
"slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "dev": true
- },
- "socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "dev": true,
- "requires": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- }
- },
- "socks-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
- "dev": true,
- "requires": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
- }
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="
},
"sort-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz",
- "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==",
- "dev": true,
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz",
+ "integrity": "sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==",
"requires": {
- "is-plain-obj": "^2.0.0"
+ "is-plain-obj": "^4.0.0"
}
},
"source-map": {
@@ -6244,205 +3000,100 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="
},
"spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz",
- "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==",
- "dev": true
- },
- "ssri": {
- "version": "10.0.5",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz",
- "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==",
- "dev": true,
- "requires": {
- "minipass": "^7.0.3"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ=="
},
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
+ "streamx": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz",
+ "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==",
"requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "events-universal": "^1.0.0",
+ "fast-fifo": "^1.3.2",
+ "text-decoder": "^1.1.0"
}
},
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
+ "strip-bom-buf": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-3.0.1.tgz",
+ "integrity": "sha512-iJaWw2WroigLHzQysdc5WWeUc99p7ea7AEgB6JkY8CMyiO1yTVAA1gIlJJgORElUIR+lcZJkNl1OGChMhvc2Cw==",
"requires": {
- "ansi-regex": "^6.0.1"
+ "is-utf8": "^0.2.1"
}
},
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
+ "strip-bom-stream": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-5.0.0.tgz",
+ "integrity": "sha512-Yo472mU+3smhzqeKlIxClre4s4pwtYZEvDNQvY/sJpnChdaxmKuwU28UVx/v1ORKNMxkmj1GBuvxJQyBk6wYMQ==",
"requires": {
- "ansi-regex": "^5.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- }
+ "first-chunk-stream": "^5.0.0",
+ "strip-bom-buf": "^3.0.0"
}
},
"strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
+ },
+ "teex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz",
+ "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
"requires": {
- "has-flag": "^4.0.0"
+ "streamx": "^2.12.5"
}
},
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
- },
- "tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
- "dev": true,
+ "text-decoder": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
+ "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
"requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
- }
+ "b4a": "^1.6.4"
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
},
"textextensions": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-5.16.0.tgz",
- "integrity": "sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==",
- "dev": true
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
+ "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
+ "requires": {
+ "editions": "^6.21.0"
+ }
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -6453,22 +3104,10 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
- "tuf-js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz",
- "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==",
- "dev": true,
- "requires": {
- "@tufjs/models": "1.0.4",
- "debug": "^4.3.4",
- "make-fetch-happen": "^11.1.1"
- }
- },
"type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
},
"uglify-js": {
"version": "3.17.4",
@@ -6477,53 +3116,55 @@
"dev": true,
"optional": true
},
- "unique-filename": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
- "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
- "dev": true,
- "requires": {
- "unique-slug": "^4.0.0"
- }
+ "undici-types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="
},
- "unique-slug": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
- "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
+ "unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="
},
"universal-user-agent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
- "validate-npm-package-name": {
+ "version-range": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
+ "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg=="
+ },
+ "vinyl": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz",
+ "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==",
+ "requires": {
+ "clone": "^2.1.2",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ }
+ },
+ "vinyl-file": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz",
- "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-5.0.0.tgz",
+ "integrity": "sha512-MvkPF/yA1EX7c6p+juVIvp9+Lxp70YUfNKzEWeHMKpUNVSnTZh2coaOqLxI0pmOe2V9nB+OkgFaMDkodaJUyGw==",
"requires": {
- "builtins": "^5.0.0"
+ "@types/vinyl": "^2.0.7",
+ "strip-bom-buf": "^3.0.1",
+ "strip-bom-stream": "^5.0.0",
+ "vinyl": "^3.0.0"
}
},
"webidl-conversions": {
@@ -6546,156 +3187,37 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
- "wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
"wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true
- }
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"yeoman-generator": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-5.9.0.tgz",
- "integrity": "sha512-sN1e01Db4fdd8P/n/yYvizfy77HdbwzvXmPxps9Gwz2D24slegrkSn+qyj+0nmZhtFwGX2i/cH29QDrvAFT9Aw==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "dargs": "^7.0.0",
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-7.5.1.tgz",
+ "integrity": "sha512-MYncRvzSTd71BMwiUMAVhfX00sDD8DZDrmPzRxQkWuWQ0V1Qt4Rd0gS/Nee2QDTWvRjvCa+KBfiAVrtOySq+JA==",
+ "peer": true,
+ "requires": {
+ "@types/lodash-es": "^4.17.9",
+ "@yeoman/namespace": "^1.0.0",
+ "chalk": "^5.3.0",
"debug": "^4.1.1",
- "execa": "^5.1.1",
- "github-username": "^6.0.0",
- "lodash": "^4.17.11",
- "mem-fs-editor": "^9.0.0",
- "minimist": "^1.2.5",
- "pacote": "^15.2.0",
- "read-pkg-up": "^7.0.1",
- "run-async": "^2.0.0",
- "semver": "^7.2.1",
- "shelljs": "^0.8.5",
- "sort-keys": "^4.2.0",
+ "execa": "^8.0.1",
+ "github-username": "^9.0.0",
+ "json-schema": "^0.4.0",
+ "latest-version": "^9.0.0",
+ "lodash-es": "^4.17.21",
+ "mem-fs-editor": "^11.0.1",
+ "minimist": "^1.2.8",
+ "read-package-up": "^11.0.0",
+ "semver": "^7.5.4",
+ "simple-git": "^3.20.0",
+ "sort-keys": "^5.0.0",
"text-table": "^0.2.0"
}
}
diff --git a/pos-module-reports/modules/core/package.json b/pos-module-reports/modules/core/package.json
index c99c7f7..49515a0 100644
--- a/pos-module-reports/modules/core/package.json
+++ b/pos-module-reports/modules/core/package.json
@@ -2,6 +2,7 @@
"name": "pos-module-core",
"version": "1.2.1",
"description": "Module description",
+ "type": "module",
"scripts": {
"version": "(cd ../../ && pos-cli modules version core -p) && git add template-values.json && auto-changelog -p && git add CHANGELOG.md"
},
@@ -15,11 +16,13 @@
"url": "https://github.com/Platform-OS/pos-module-core/issues"
},
"homepage": "https://github.com/Platform-OS/pos-module-core#readme",
+ "peerDependencies": {
+ "yeoman-generator": "^7.0.0"
+ },
"devDependencies": {
"auto-changelog": "^2.4.0",
"lodash.startcase": "^4.4.0",
- "pluralize": "^8.0.0",
- "yeoman-generator": "^5.9.0"
+ "pluralize": "^8.0.0"
},
"auto-changelog": {
"template": "changelog-template.hbs",
diff --git a/pos-module-reports/modules/core/public/emails/.keep b/pos-module-reports/modules/core/public/emails/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/graphql/.keep b/pos-module-reports/modules/core/public/graphql/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/lib/commands/.keep b/pos-module-reports/modules/core/public/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/lib/commands/email/send.liquid b/pos-module-reports/modules/core/public/lib/commands/email/send.liquid
index bd0a46e..1fc5273 100644
--- a/pos-module-reports/modules/core/public/lib/commands/email/send.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/email/send.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
function object = 'modules/core/commands/email/send/build', object: object
function object = 'modules/core/commands/email/send/check', object: object
@@ -7,8 +10,8 @@
if r.errors
log r.errors, type: 'errors.graphql.invalid'
- hash_assign object['valid'] = false
- hash_assign object['errors'] = r.errors
+ assign object.valid = false
+ assign object.errors = r.errors
endif
else
log object.errors, type: 'payload validation error in core: commands/email'
diff --git a/pos-module-reports/modules/core/public/lib/commands/email/send/check.liquid b/pos-module-reports/modules/core/public/lib/commands/email/send/check.liquid
index 83f4269..50c8aec 100644
--- a/pos-module-reports/modules/core/public/lib/commands/email/send/check.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/email/send/check.liquid
@@ -1,13 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/broadcast.liquid b/pos-module-reports/modules/core/public/lib/commands/events/broadcast.liquid
index 5cf9440..ec2b6bd 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/broadcast.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/broadcast.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
{% liquid
if object.type == blank
log 'ERROR: events broadcast type blank'
@@ -6,9 +11,9 @@
assign priorities = 'low,default,high' | split: ','
assign name = 'consumers/' | append: object.type | append: '/'
- graphql consumers = 'modules/core/events/consumers', name: name | fetch: "admin_liquid_partials" | fetch: "results"
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
- hash_assign object['consumers'] = consumers
+ assign object.consumers = consumers
for consumer in consumers
assign priority = 'default'
if priorities contains consumer.metadata.priority
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/create.liquid b/pos-module-reports/modules/core/public/lib/commands/events/create.liquid
index 50d44ce..c32c970 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/create.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/create.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} deprecated_delay - Deprecated: use metadata.delay in consumer file instead
+ @param {number} deprecated_max_attempts - Deprecated: use metadata.max_attempts in consumer file instead
+{% enddoc %}
{% liquid
function event = 'modules/core/commands/events/create/build', type: type, object: object
function event = 'modules/core/commands/events/create/check', object: event, type: type
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/create/build.liquid b/pos-module-reports/modules/core/public/lib/commands/events/create/build.liquid
index 8276ea4..32e10ed 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/create/build.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/create/build.liquid
@@ -1,6 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
assign now = 'now' | to_time
- assign data = object | hash_merge: type: type, date: now
+ assign data = object
+ assign data.type = type
+ assign data.date = now
return data
%}
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/create/check.liquid b/pos-module-reports/modules/core/public/lib/commands/events/create/check.liquid
index b4f2878..a11a644 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/create/check.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/create/check.liquid
@@ -1,11 +1,15 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'date', key: null
assign name = 'events/' | append: object.type
- graphql event_check_partials = 'modules/core/events/events_checks', name: name | fetch: "admin_liquid_partials" | fetch: "results"
+ graphql event_check_partials = 'modules/core/events/events_checks', name: name | dig: "admin_liquid_partials", "results"
for partial in event_check_partials
assign is_event_definition = partial.path | matches: '^(modules/[^/]+/events/[^/]++|events/[^/]+)$'
if is_event_definition
@@ -17,14 +21,16 @@
if event_check_partial
function event_result = event_check_partial.path, event: object
if event_result.valid != true
- hash_assign c['errors']['object'] = event_result.errors
- hash_assign c['valid'] = false
+ assign c.errors.object = event_result.errors
+ assign c.valid = false
endif
else
assign message = 'There is no such event: ' | append: object.type | append: '. Please add event check in events/' | append: object.type
- function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: type, message: message, key: null
endif
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/create/execute.liquid b/pos-module-reports/modules/core/public/lib/commands/events/create/execute.liquid
index bff75bf..d94fff4 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/create/execute.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/create/execute.liquid
@@ -1,8 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
graphql r = 'modules/core/events/create', payload: object
assign object = r.activity_create.payload
- hash_assign object['valid'] = true
+ assign object.valid = true
return object
%}
diff --git a/pos-module-reports/modules/core/public/lib/commands/events/publish.liquid b/pos-module-reports/modules/core/public/lib/commands/events/publish.liquid
index 75be92b..586ad27 100644
--- a/pos-module-reports/modules/core/public/lib/commands/events/publish.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/events/publish.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} type - The type identifier
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+{% enddoc %}
{% liquid
if delay > 0
log 'use metadata.delay in the consumer file instead of passing it to modules/core/commands/events/publish', type: 'DEPRECATION'
diff --git a/pos-module-reports/modules/core/public/lib/commands/execute.liquid b/pos-module-reports/modules/core/public/lib/commands/execute.liquid
index 0c9e1cd..e0510a4 100644
--- a/pos-module-reports/modules/core/public/lib/commands/execute.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/execute.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} mutation_name - The GraphQL mutation name
+ @param {object} object - The object to process
+ @param {string} selection - The GraphQL result selection key
+{% enddoc %}
{% liquid
assign selection = selection | default: 'record'
@@ -7,6 +12,6 @@
endif
assign object = r[selection]
- hash_assign object['valid'] = true
+ assign object.valid = true
return object
%}
diff --git a/pos-module-reports/modules/core/public/lib/commands/hook/alter.liquid b/pos-module-reports/modules/core/public/lib/commands/hook/alter.liquid
index 64e2245..19f42fb 100644
--- a/pos-module-reports/modules/core/public/lib/commands/hook/alter.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/hook/alter.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix and _alter suffix.
- params_to_modify: object
- the object that will be passed to the alter hook to modify
- params: object
- the object that will be passed to the alter hook to give extra information
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
{% liquid
assign original_params = params_to_modify | deep_clone
@@ -16,6 +13,6 @@
function _ = implementation.path, params_to_modify: params_to_modify, params: params
endfor
- assign result = '{}' | parse_json | hash_merge: original_params: original_params
+ assign result = { "original_params": original_params }
return result
%}
diff --git a/pos-module-reports/modules/core/public/lib/commands/hook/fire.liquid b/pos-module-reports/modules/core/public/lib/commands/hook/fire.liquid
index c4956c8..0b35c38 100644
--- a/pos-module-reports/modules/core/public/lib/commands/hook/fire.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/hook/fire.liquid
@@ -1,16 +1,13 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix.
- params: object
- the object to pass to the fired hook
- merge_to_object boolean
- merge the result objects to one object or collect them in an array
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
{% liquid
if merge_to_object
- assign results = '{}' | parse_json
+ assign results = {}
else
- assign results = '[]' | parse_json
+ assign results = []
endif
assign hook = '/hook_' | append: hook
@@ -24,7 +21,7 @@
endcomment
if hook_result[0]
for h_result in hook_result
- assign results = results | add_to_array: h_result
+ assign results << h_result
endfor
comment
Check if the result is an object.
@@ -32,7 +29,7 @@
elsif hook_result.first and merge_to_object
assign results = results | hash_merge: hook_result
else
- assign results = results | add_to_array: hook_result
+ assign results << hook_result
endif
endif
endfor
diff --git a/pos-module-reports/modules/core/public/lib/commands/session/clear.liquid b/pos-module-reports/modules/core/public/lib/commands/session/clear.liquid
index 65a82ef..b823fa5 100644
--- a/pos-module-reports/modules/core/public/lib/commands/session/clear.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/session/clear.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
if context.session[key] != blank
graphql _ = 'modules/core/session/delete', name: key
diff --git a/pos-module-reports/modules/core/public/lib/commands/session/get.liquid b/pos-module-reports/modules/core/public/lib/commands/session/get.liquid
index 5ed4854..02b8240 100644
--- a/pos-module-reports/modules/core/public/lib/commands/session/get.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/session/get.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {boolean} clear - If true, clear the session value after reading
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
if context.session[key] != blank
assign value = context.session[key] | parse_json
diff --git a/pos-module-reports/modules/core/public/lib/commands/session/set.liquid b/pos-module-reports/modules/core/public/lib/commands/session/set.liquid
index 0dfb2e4..3441120 100644
--- a/pos-module-reports/modules/core/public/lib/commands/session/set.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/session/set.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
{% liquid
assign value = value | json
graphql _ = 'modules/core/session/set', name: key, value: value
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/create.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/create.liquid
index 10e483e..dc5f46d 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/create.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/create.liquid
@@ -1,24 +1,19 @@
-{% comment %}
- Creates a status object.
-
- Params:
- - name: String
- the name of the status. For example: 'app.status.transaction.failed'
- - reference_id
- - requester_id
- the ID of the requester. It can be a user ID or 'stripe_webhook' or anything else that represents who stored the status
- - timestamp (optional)
- - reference_schema (optional)
- - payload (optional)
- - delay (optional)
- - max_attempts (optional)
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} delay - Delay in minutes before processing
+ @param {number} max_attempts - Maximum number of retry attempts
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
{% liquid
function object = 'modules/core/commands/statuses/create/build', name: name, timestamp: timestamp, reference_id: reference_id, reference_schema: reference_schema, payload: payload, requester_id: requester_id
function object = 'modules/core/commands/statuses/create/check', object: object
if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/core/statuses/create' object: object, selection: null
if object.valid
function _ = 'modules/core/commands/events/publish', type: 'status_created', object: object, delay: delay, max_attempts: max_attempts
endif
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/create/build.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/create/build.liquid
index 6cf9f0c..b46956a 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/create/build.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/create/build.liquid
@@ -1,3 +1,11 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {object} payload - The payload data
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
{% parse_json object %}
{
"name": {{ name | json }},
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/create/check.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/create/check.liquid
index acbcb25..61a2d21 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/create/check.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/create/check.liquid
@@ -1,13 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'timestamp', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'requester_id', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/delete.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/delete.liquid
index e115b0c..5c79d78 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/delete.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/delete.liquid
@@ -1,9 +1,6 @@
-{% comment %}
- Deletes a status object.
-
- Params:
- - id: String
-{% endcomment %}
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
function object = 'modules/core/commands/statuses/delete/build', id: id
function object = 'modules/core/commands/statuses/delete/check', object: object
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/delete/build.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/delete/build.liquid
index d26bbdf..29c1322 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/delete/build.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/delete/build.liquid
@@ -1,4 +1,7 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
- assign object = null | hash_merge: id: id
+ assign object = {"id": id}
return object
%}
diff --git a/pos-module-reports/modules/core/public/lib/commands/statuses/delete/check.liquid b/pos-module-reports/modules/core/public/lib/commands/statuses/delete/check.liquid
index 51f8988..737a3fd 100644
--- a/pos-module-reports/modules/core/public/lib/commands/statuses/delete/check.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/statuses/delete/check.liquid
@@ -1,10 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "valid": true, "errors": {} }' | parse_json
+ assign c = { "valid": true, "errors": {} }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/public/lib/commands/variable/set.liquid b/pos-module-reports/modules/core/public/lib/commands/variable/set.liquid
index aa88b52..cdbc3b8 100644
--- a/pos-module-reports/modules/core/public/lib/commands/variable/set.liquid
+++ b/pos-module-reports/modules/core/public/lib/commands/variable/set.liquid
@@ -1,8 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - value string
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
{% liquid
graphql result = 'modules/core/variable/set', name: name, value: value
return result.variable
diff --git a/pos-module-reports/modules/core/public/lib/events/status_created.liquid b/pos-module-reports/modules/core/public/lib/events/status_created.liquid
index 6718a16..02541f7 100644
--- a/pos-module-reports/modules/core/public/lib/events/status_created.liquid
+++ b/pos-module-reports/modules/core/public/lib/events/status_created.liquid
@@ -7,12 +7,15 @@ metadata:
requester_id
payload
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'reference_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'requester_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/helpers/authenticity_token.liquid b/pos-module-reports/modules/core/public/lib/helpers/authenticity_token.liquid
index b435480..6262ed4 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/authenticity_token.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/authenticity_token.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} authenticity_token - The authenticity token from the form
+ @param {string} token - The authenticity token value
+{% enddoc %}
{% assign token = token | default: authenticity_token | default: context.authenticity_token %}
{% unless token %}
Liquid Error AuthenticityTokenNotFound
diff --git a/pos-module-reports/modules/core/public/lib/helpers/flash/publish.liquid b/pos-module-reports/modules/core/public/lib/helpers/flash/publish.liquid
index 41f14d9..cd5847d 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/flash/publish.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/flash/publish.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+{% enddoc %}
{% liquid
if error and error contains 'app.'
assign error = error | t
diff --git a/pos-module-reports/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid b/pos-module-reports/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
index 73e48bb..05d1820 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid
@@ -1,8 +1,11 @@
+{% doc %}
+ @param {object} payload - The payload data
+{% enddoc %}
{% liquid
assign parameters = '' | split: ','
for pair in payload
assign component = pair[0] | append: '={' | append: pair[0] | append: '}'
- assign parameters = parameters | add_to_array: component
+ assign parameters << component
endfor
if parameters.size > 0
assign x_form_encoded = parameters | join: '&' | expand_url_template: payload
diff --git a/pos-module-reports/modules/core/public/lib/helpers/log_time.liquid b/pos-module-reports/modules/core/public/lib/helpers/log_time.liquid
index 76ef86d..447397a 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/log_time.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/log_time.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} _start - The start time for measuring elapsed time
+ @param {string} type - The type identifier
+ @param {string} env - The environment name for logging
+{% enddoc %}
{% liquid
assign _stop = 'now' | to_time
assign _diff = _start | time_diff: _stop
diff --git a/pos-module-reports/modules/core/public/lib/helpers/redirect_to.liquid b/pos-module-reports/modules/core/public/lib/helpers/redirect_to.liquid
index 3d430eb..8f14d81 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/redirect_to.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/redirect_to.liquid
@@ -1,3 +1,12 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+ @param {object} object - The object to process
+ @param {string} default - The default value
+ @param {string} format - The response format
+ @param {string} url - The URL to redirect to
+{% enddoc %}
{% liquid
if url == blank and context.session.return_to != blank
assign url = context.session.return_to
@@ -18,18 +27,17 @@
assign url = url | default: default
endif
- # platformos-check-disable ConvertIncludeToRender
- include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info
- # platformos-check-enable ConvertIncludeToRender
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/flash/publish', notice: notice, error: error, info: info, force_clear: null
+ # platformos-check-enable DeprecatedTag
if format == 'json'
- assign response_json = null | hash_merge: type: 'redirect', url: url
+ assign response_json = {"type": "redirect", "url": url}
if object.valid
echo response_json
else
response_status 422
- assign res = '{ "errors": {} }' | parse_json
- hash_assign res['errors'] = response_json.errors
+ assign res = { "errors": response_json.errors }
echo res
endif
diff --git a/pos-module-reports/modules/core/public/lib/helpers/register_error.liquid b/pos-module-reports/modules/core/public/lib/helpers/register_error.liquid
index 2f252ef..f016b3e 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/register_error.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/register_error.liquid
@@ -1,11 +1,9 @@
-{% comment %}
- @params
- contract - { errors: {}, valid: true }
- field_name
- message:
- key: i18n to be resolved into message
-{% endcomment %}
-
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
assign key = key | default: null
assign message = message | default: null
@@ -17,11 +15,12 @@
assign errors = contract.errors
- assign field_errors = errors[field_name] | default: '[]' | parse_json
- assign field_errors = field_errors | add_to_array: msg
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
- hash_assign errors[field_name] = field_errors
- hash_assign contract['valid'] = false
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
return contract
%}
diff --git a/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_name.liquid b/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_name.liquid
index 766affe..20f429d 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_name.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_name.liquid
@@ -1,18 +1,6 @@
-{% comment %}
- params:
- - name: string
-
-returns a timezone object in the following format:
-{
- "formatted_name":"(GMT-12:00) International Date Line West",
- "formatted_offset":"-12:00",
- "name":"International Date Line West",
- "utc_offset":-43200,
- "abbreviation":"-12",
- "friendly_name_with_region":"Etc - GMT+12",
- "friendly_name_without_region":"GMT+12"
-}
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+{% enddoc %}
{% liquid
function timezones = 'modules/core/helpers/timezone/get_all'
assign timezone = timezones | array_detect: name: name
diff --git a/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_offset.liquid b/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
index f10f26e..478d3ae 100644
--- a/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
+++ b/pos-module-reports/modules/core/public/lib/helpers/timezone/get_by_offset.liquid
@@ -1,18 +1,6 @@
-{% comment %}
- params:
- - offset: string, e.g. "+2:00"
-
-returns a timezone object in the following format:
-{
- "formatted_name":"(GMT-12:00) International Date Line West",
- "formatted_offset":"-12:00",
- "name":"International Date Line West",
- "utc_offset":-43200,
- "abbreviation":"-12",
- "friendly_name_with_region":"Etc - GMT+12",
- "friendly_name_without_region":"GMT+12"
-}
-{% endcomment %}
+{% doc %}
+ @param {number} offset
+{% enddoc %}
{% liquid
function timezones = 'modules/core/helpers/timezone/get_all'
assign timezone = timezones | array_detect: formatted_offset: offset
diff --git a/pos-module-reports/modules/core/public/lib/hooks/.keep b/pos-module-reports/modules/core/public/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/lib/queries/.keep b/pos-module-reports/modules/core/public/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/lib/queries/constants/find.liquid b/pos-module-reports/modules/core/public/lib/queries/constants/find.liquid
new file mode 100644
index 0000000..84fe8d8
--- /dev/null
+++ b/pos-module-reports/modules/core/public/lib/queries/constants/find.liquid
@@ -0,0 +1,38 @@
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
+{% if context.constants %}
+ {% assign value = context.constants[name] %}
+{% else %}
+ {% graphql r, name: name %}
+ query get_constant($name: String!) {
+ constant(filter: { name: $name }) {
+ name
+ value
+ }
+ }
+ {% endgraphql %}
+ {% assign value = r.constant.value %}
+{% endif %}
+
+{% liquid
+ case type
+ when "boolean"
+ if value == "true"
+ return true
+ else
+ return false
+ endif
+ when "integer"
+ assign value = value | plus: 0
+ return value
+ when "array"
+ assign value = value | split: ','
+ return value
+ when "time"
+ return value | to_time
+ else
+ return value
+ endcase
+%}
diff --git a/pos-module-reports/modules/core/public/lib/queries/events/find.liquid b/pos-module-reports/modules/core/public/lib/queries/events/find.liquid
index 8b16384..c3d264a 100644
--- a/pos-module-reports/modules/core/public/lib/queries/events/find.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/events/find.liquid
@@ -1,9 +1,12 @@
+{% doc %}
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
{% liquid
if uuid == blank
return null
endif
- function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid
+ function events = 'modules/core/queries/events/search', limit: 1, uuids: uuid, page: null
return events.results.first.payload
%}
diff --git a/pos-module-reports/modules/core/public/lib/queries/events/search.liquid b/pos-module-reports/modules/core/public/lib/queries/events/search.liquid
index 3363d0a..2569598 100644
--- a/pos-module-reports/modules/core/public/lib/queries/events/search.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/events/search.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} uuids - List of UUID identifiers
+{% enddoc %}
{% liquid
assign page = page | to_positive_integer: 1
assign uuids = uuids | default: null
diff --git a/pos-module-reports/modules/core/public/lib/queries/headscripts/get.liquid b/pos-module-reports/modules/core/public/lib/queries/headscripts/get.liquid
index f35c496..e2453ef 100644
--- a/pos-module-reports/modules/core/public/lib/queries/headscripts/get.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/headscripts/get.liquid
@@ -1,5 +1,5 @@
{% liquid
# TODO: remove after rewriting dependent modules
- function res = 'modules/core/queries/headscripts/search'
+ function res = 'modules/core/queries/headscripts/search', merge_to_object: null
return res
%}
diff --git a/pos-module-reports/modules/core/public/lib/queries/headscripts/search.liquid b/pos-module-reports/modules/core/public/lib/queries/headscripts/search.liquid
index 40b4c03..989f536 100644
--- a/pos-module-reports/modules/core/public/lib/queries/headscripts/search.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/headscripts/search.liquid
@@ -1,5 +1,5 @@
{% liquid
- function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false
+ function headscript_implementations = 'modules/core/commands/hook/fire', hook: 'headscripts', merge_to_object: false, params: null
assign results = headscript_implementations | join: ''
return results | html_safe
%}
diff --git a/pos-module-reports/modules/core/public/lib/queries/hook/search.liquid b/pos-module-reports/modules/core/public/lib/queries/hook/search.liquid
index b78fd16..5b49f62 100644
--- a/pos-module-reports/modules/core/public/lib/queries/hook/search.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/hook/search.liquid
@@ -1,10 +1,6 @@
-{% comment %}
- Get a list of all hook impltementation paths.
- Params:
- - hook: string
- the hook's name with '/' prefix for example '/hook_user_create'.
-{% endcomment %}
-
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
{% liquid
graphql implementations = 'modules/core/hook/search', hook: hook
return implementations.admin_liquid_partials.results
diff --git a/pos-module-reports/modules/core/public/lib/queries/module/exists.liquid b/pos-module-reports/modules/core/public/lib/queries/module/exists.liquid
index 1e76c73..474665d 100644
--- a/pos-module-reports/modules/core/public/lib/queries/module/exists.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/module/exists.liquid
@@ -1,9 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - type string (optional)
- it can be: module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
function modules = 'modules/core/queries/registry/search', type: type
assign module = modules | array_detect: machine_name: name
diff --git a/pos-module-reports/modules/core/public/lib/queries/registry/get.liquid b/pos-module-reports/modules/core/public/lib/queries/registry/get.liquid
index 83dde39..aa3524a 100644
--- a/pos-module-reports/modules/core/public/lib/queries/registry/get.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/registry/get.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function registry = 'modules/core/queries/registry/search', type: type
diff --git a/pos-module-reports/modules/core/public/lib/queries/registry/search.liquid b/pos-module-reports/modules/core/public/lib/queries/registry/search.liquid
index 60e1126..96116a4 100644
--- a/pos-module-reports/modules/core/public/lib/queries/registry/search.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/registry/search.liquid
@@ -1,25 +1,23 @@
-{% comment %}
- Required params:
- - type string
- it can be: all, module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
- function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false
+ function registry = 'modules/core/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
case type
when 'module'
- assign modules = '[]' | parse_json
+ assign modules = []
for module in registry
if module.type == 'module'
- assign modules = modules | add_to_array: module
+ assign modules << module
endif
endfor
return modules
when 'theme'
- assign themes = '[]' | parse_json
+ assign themes = []
for module in registry
if module.type == 'theme'
- assign themes = themes | add_to_array: module
+ assign themes << module
endif
endfor
return themes
diff --git a/pos-module-reports/modules/core/public/lib/queries/statuses/find.liquid b/pos-module-reports/modules/core/public/lib/queries/statuses/find.liquid
index 2055b3f..b7cf078 100644
--- a/pos-module-reports/modules/core/public/lib/queries/statuses/find.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/statuses/find.liquid
@@ -1,9 +1,6 @@
-{% comment %}
- Find a status object.
-
- Params:
- - id: String
-{% endcomment %}
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
if id == blank
return null
diff --git a/pos-module-reports/modules/core/public/lib/queries/statuses/search.liquid b/pos-module-reports/modules/core/public/lib/queries/statuses/search.liquid
index 36f2b8e..f4f79d8 100644
--- a/pos-module-reports/modules/core/public/lib/queries/statuses/search.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/statuses/search.liquid
@@ -1,20 +1,13 @@
-{% comment %}
- Creates a status object.
-
- Params:
- - page
- default: 1
- - limit
- default: 20
- - id
- - name: String
- the name of the status. For example: 'app.status.transaction.failed'
- - reference_id
- - requester_id
- the ID of the requester. It can be a user ID or 'stripe_webhook' or anything else that represents who stored the status
- - timestamp (optional)
- - reference_schema (optional)
-{% endcomment %}
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} name - The name identifier
+ @param {string} reference_id - The reference record ID
+ @param {string} requester_id - The ID of the requester
+ @param {number} limit - Maximum number of results
+ @param {number} page - Page number for pagination
+ @param {string} reference_schema - The reference schema name
+ @param {string} timestamp - The timestamp
+{% enddoc %}
{% liquid
assign page = page | to_positive_integer: 1
assign limit = limit | default: 20
diff --git a/pos-module-reports/modules/core/public/lib/queries/variable/find.liquid b/pos-module-reports/modules/core/public/lib/queries/variable/find.liquid
index b7012e3..c2ec54c 100644
--- a/pos-module-reports/modules/core/public/lib/queries/variable/find.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/variable/find.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- Required params:
- - name string
- - default any
- the default vaue of the variable
- - type string (optional)
- it can be: array, integer, float, boolean, object
-{% endcomment %}
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
{% liquid
assign value = context.constants[name] | default: default, allow_false: true
diff --git a/pos-module-reports/modules/core/public/lib/queries/variable/get.liquid b/pos-module-reports/modules/core/public/lib/queries/variable/get.liquid
index 6f11259..e51e5de 100644
--- a/pos-module-reports/modules/core/public/lib/queries/variable/get.liquid
+++ b/pos-module-reports/modules/core/public/lib/queries/variable/get.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function res = 'modules/core/queries/variable/find', name: name, default: default, type: type
diff --git a/pos-module-reports/modules/core/public/lib/validations/date.liquid b/pos-module-reports/modules/core/public/lib/validations/date.liquid
index 15cb224..7125e98 100644
--- a/pos-module-reports/modules/core/public/lib/validations/date.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/date.liquid
@@ -1,10 +1,21 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @date
- @can_be_past
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
{% liquid
assign date = date | default: object[field_name] | to_date
@@ -19,12 +30,12 @@
if can_be_past == false and is_past
assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if can_be_future == false and is_future
assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lt != null
@@ -32,7 +43,7 @@
if date >= lt
assign localized_date = lt | l
assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -41,7 +52,7 @@
if date > lte
assign localized_date = lte | l
assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -50,7 +61,7 @@
if date <= gt
assign localized_date = gt | l
assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -59,7 +70,7 @@
if date < gte
assign localized_date = gte | l
assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
diff --git a/pos-module-reports/modules/core/public/lib/validations/each_element_length.liquid b/pos-module-reports/modules/core/public/lib/validations/each_element_length.liquid
index 8513f87..85f5315 100644
--- a/pos-module-reports/modules/core/public/lib/validations/each_element_length.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/each_element_length.liquid
@@ -1,11 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
{% liquid
for el in object[field_name]
@@ -14,18 +14,18 @@
if minimum != null and size < minimum
assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
assign message = el | append: ' ' | append: message
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endfor
diff --git a/pos-module-reports/modules/core/public/lib/validations/elements_included.liquid b/pos-module-reports/modules/core/public/lib/validations/elements_included.liquid
index ec64b3a..6b58bde 100644
--- a/pos-module-reports/modules/core/public/lib/validations/elements_included.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/elements_included.liquid
@@ -1,17 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
for val in object[field_name]
unless array contains val
assign key = key | default: "modules/core/validation.array.not_included"
assign message = key | t: value: val
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endunless
endfor
diff --git a/pos-module-reports/modules/core/public/lib/validations/email.liquid b/pos-module-reports/modules/core/public/lib/validations/email.liquid
index d8a1188..39c8029 100644
--- a/pos-module-reports/modules/core/public/lib/validations/email.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/email.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
assign valid_email = object[field_name] | is_email_valid
unless valid_email
assign key = key | default: "modules/core/validation.email"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/equal.liquid b/pos-module-reports/modules/core/public/lib/validations/equal.liquid
index 12645af..6b367e4 100644
--- a/pos-module-reports/modules/core/public/lib/validations/equal.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/equal.liquid
@@ -1,9 +1,12 @@
-{% comment %}
- params: @given
- @expected
- @field_name
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
{% liquid
if given != expected
diff --git a/pos-module-reports/modules/core/public/lib/validations/exist_in_db.liquid b/pos-module-reports/modules/core/public/lib/validations/exist_in_db.liquid
index 64256c8..abc8a51 100644
--- a/pos-module-reports/modules/core/public/lib/validations/exist_in_db.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/exist_in_db.liquid
@@ -1,17 +1,17 @@
-{% comment %}
- params: @field_name
- @property_name
- @property_value
- @scope_name
- @scope_value
- @exclude_name
- @exclude_value
- @ids
- @not_ids
- @table
- @key
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
{% liquid
assign property_name = property_name | default: ''
assign property_value = property_value | default: ''
@@ -25,7 +25,7 @@
assign count = r.records.total_entries
if count == 0
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/hcaptcha.liquid b/pos-module-reports/modules/core/public/lib/validations/hcaptcha.liquid
index 2d41b0c..21289c9 100644
--- a/pos-module-reports/modules/core/public/lib/validations/hcaptcha.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/hcaptcha.liquid
@@ -1,14 +1,13 @@
-{% comment %}
- params: @hcaptcha_params
- @key
- @c
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
assign hcaptcha_solved = hcaptcha_params | hcaptcha
unless hcaptcha_solved
assign key = key | default: "modules/core/validation.hcaptcha"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/included.liquid b/pos-module-reports/modules/core/public/lib/validations/included.liquid
index 17142bc..a432b8c 100644
--- a/pos-module-reports/modules/core/public/lib/validations/included.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/included.liquid
@@ -1,16 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
{% liquid
assign value = value | default: object[field_name]
unless array contains value
assign key = key | default: "modules/core/validation.not_included"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/is_url.liquid b/pos-module-reports/modules/core/public/lib/validations/is_url.liquid
new file mode 100644
index 0000000..8ffaa46
--- /dev/null
+++ b/pos-module-reports/modules/core/public/lib/validations/is_url.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} url - The URL to redirect to
+ @param {string} key - The translation key for the error message
+{% enddoc %}
+{% liquid
+ assign key = key | default: 'modules/core/validation.not_url'
+ assign is_url = url | matches: '^https?:\/\/[\S]+'
+
+ if is_url != true
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
+ endif
+
+ return c
+%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/core/public/lib/validations/length.liquid b/pos-module-reports/modules/core/public/lib/validations/length.liquid
index 3be800e..fba5e45 100644
--- a/pos-module-reports/modules/core/public/lib/validations/length.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/length.liquid
@@ -1,14 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
- @message_minimum
- @message_maximum
- @message_is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
{% liquid
assign value = value | default: object[field_name]
assign size = value.size
@@ -20,22 +22,22 @@
assign allow_blank = true
endif
if allow_blank != true
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: field_name, key: null
endif
if minimum != null and size < minimum
assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/lib/validations/matches.liquid b/pos-module-reports/modules/core/public/lib/validations/matches.liquid
index e538a7c..19a1c8a 100644
--- a/pos-module-reports/modules/core/public/lib/validations/matches.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/matches.liquid
@@ -1,10 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @regexp
- @c
- @message
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
if allow_blank and object[field_name] == blank
return c
@@ -13,7 +14,7 @@
assign matches = object[field_name] | matches: regexp
if matches != true
assign message = message | default: 'modules/core/validation.matches' | t
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/not_null.liquid b/pos-module-reports/modules/core/public/lib/validations/not_null.liquid
index 986541b..810b5f8 100644
--- a/pos-module-reports/modules/core/public/lib/validations/not_null.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/not_null.liquid
@@ -1,14 +1,13 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
if object[field_name] == null
assign key = key | default: "modules/core/validation.null"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/number.liquid b/pos-module-reports/modules/core/public/lib/validations/number.liquid
index a0fea11..d39591f 100644
--- a/pos-module-reports/modules/core/public/lib/validations/number.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/number.liquid
@@ -1,15 +1,22 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @number
- @lt - less than
- @lte - less than or equal
- @gt - greater than
- @gte - greater than or equal
- @eq - equal
- @ne - not equal
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
{% liquid
assign number = number | default: object[field_name]
%}
@@ -18,7 +25,7 @@
{% liquid
if test1 != test2
assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
return c
endif
@@ -27,7 +34,7 @@
if lt != null and number >= lt
assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lte == blank
@@ -35,27 +42,27 @@
endif
if number > lte
assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gt != null and number <= gt
assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gte != null and number < gte
assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if eq != null and number != eq
assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if ne != null and number == ne
assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/lib/validations/password_complexity.liquid b/pos-module-reports/modules/core/public/lib/validations/password_complexity.liquid
index ad4b34d..634daa6 100644
--- a/pos-module-reports/modules/core/public/lib/validations/password_complexity.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/password_complexity.liquid
@@ -1,35 +1,36 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+ @param {string} field_name - The name of the field to validate
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
{% liquid
assign decoded_pw = object.password
assign minimum = minimum | default: 6
assign maximum = maximum | default: 256
assign field_name = field_name | default: 'password'
- function complex_password = 'modules/core/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", context: context
+ function complex_password = 'modules/core/queries/variable/find', name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
if complex_password
assign has_lowercase = decoded_pw | matches: '[a-z]'
unless has_lowercase
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.lowercase', message: null
endunless
assign has_uppercase = decoded_pw | matches: '[A-Z]'
unless has_uppercase
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.uppercase', message: null
endunless
assign has_number = decoded_pw | matches: '\d'
unless has_number
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.password.number', message: null
endunless
endif
- function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: key: 'modules/core/validation.too_short', allow_blank: null
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/validations/length', c: c, object: object, value: decoded_pw, field_name: field_name, maximum: maximum, minimum: minimum, message_minimum: message_minimum, allow_blank: null, is: null, message_is: null, message_maximum: null
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/presence.liquid b/pos-module-reports/modules/core/public/lib/validations/presence.liquid
index 70b1f54..6526d2b 100644
--- a/pos-module-reports/modules/core/public/lib/validations/presence.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/presence.liquid
@@ -1,14 +1,13 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
if object[field_name] == blank
assign key = key | default: "modules/core/validation.blank"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/truthy.liquid b/pos-module-reports/modules/core/public/lib/validations/truthy.liquid
index 6e9a734..86b428e 100644
--- a/pos-module-reports/modules/core/public/lib/validations/truthy.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/truthy.liquid
@@ -1,14 +1,13 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
unless object[field_name]
assign key = key | default: "modules/core/validation.not_truthy"
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/lib/validations/unique_elements.liquid b/pos-module-reports/modules/core/public/lib/validations/unique_elements.liquid
index 3af3717..4bca1e8 100644
--- a/pos-module-reports/modules/core/public/lib/validations/unique_elements.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/unique_elements.liquid
@@ -1,18 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
assign unique_count = object[field_name] | uniq | size
if unique_count != object[field_name].size
assign key = key | default: 'modules/core/validation.array.not_unique'
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/lib/validations/uniqueness.liquid b/pos-module-reports/modules/core/public/lib/validations/uniqueness.liquid
index 42b2af8..76a9948 100644
--- a/pos-module-reports/modules/core/public/lib/validations/uniqueness.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/uniqueness.liquid
@@ -1,3 +1,12 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
{% liquid
assign key = key | default: 'modules/core/validation.taken'
assign value = object[field_name]
@@ -21,7 +30,7 @@
assign count = r.records.total_entries
if count > 0
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
endif
return c
diff --git a/pos-module-reports/modules/core/public/lib/validations/valid_object.liquid b/pos-module-reports/modules/core/public/lib/validations/valid_object.liquid
index b29a9b1..6693ec3 100644
--- a/pos-module-reports/modules/core/public/lib/validations/valid_object.liquid
+++ b/pos-module-reports/modules/core/public/lib/validations/valid_object.liquid
@@ -1,18 +1,18 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @check_function
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
{% liquid
assign value = value | default: object[field_name]
if value
function check_object = check_function, object: value
if check_object.valid != true
- function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid'
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
assign errors_key = field_name | append: '_errors'
- hash_assign c['errors'][errors_key] = check_object.errors
+ assign c.errors[errors_key] = check_object.errors
endif
endif
diff --git a/pos-module-reports/modules/core/public/views/pages/_events/index.liquid b/pos-module-reports/modules/core/public/views/pages/_events/index.liquid
index c5b67f5..e5c90c8 100644
--- a/pos-module-reports/modules/core/public/views/pages/_events/index.liquid
+++ b/pos-module-reports/modules/core/public/views/pages/_events/index.liquid
@@ -4,7 +4,7 @@ slug: _events
---
{% liquid
if context.environment == 'staging' or context.environment == 'development'
- function events = 'modules/core/queries/events/search', limit: 50
+ function events = 'modules/core/queries/events/search', limit: 50, page: null, uuids: null
render 'modules/core/events/list', events: events
endif
diff --git a/pos-module-reports/modules/core/public/views/pages/_events/trigger.liquid b/pos-module-reports/modules/core/public/views/pages/_events/trigger.liquid
index 9ac9edd..85099b8 100644
--- a/pos-module-reports/modules/core/public/views/pages/_events/trigger.liquid
+++ b/pos-module-reports/modules/core/public/views/pages/_events/trigger.liquid
@@ -7,12 +7,12 @@ slug: _events/:uuid/trigger
function event = 'modules/core/queries/events/find', uuid: context.params.uuid
if context.params.trigger
- function event = 'modules/core/commands/events/broadcast', object: event
+ function event = 'modules/core/commands/events/broadcast', object: event, deprecated_delay: null, deprecated_max_attempts: null
echo 'BROADCASTED'
else
assign name = 'consumers/' | append: event.type | append: '/'
- graphql consumers = 'modules/core/events/consumers', name: name | fetch: "admin_liquid_partials" | fetch: "results"
- hash_assign event['consumers'] = consumers
+ graphql consumers = 'modules/core/events/consumers', name: name | dig: "admin_liquid_partials", "results"
+ assign event.consumers = consumers
endif
render 'modules/core/events/show', event: event
diff --git a/pos-module-reports/modules/core/public/views/partials/.gitkeep b/pos-module-reports/modules/core/public/views/partials/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/views/partials/events/event_card.liquid b/pos-module-reports/modules/core/public/views/partials/events/event_card.liquid
index 269dbaf..fcee8e2 100644
--- a/pos-module-reports/modules/core/public/views/partials/events/event_card.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/events/event_card.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
assign event_slim = event | deep_clone
assign _ = event_slim | hash_delete_key: 'object'
diff --git a/pos-module-reports/modules/core/public/views/partials/events/list.liquid b/pos-module-reports/modules/core/public/views/partials/events/list.liquid
index a08712a..d6c0c4a 100644
--- a/pos-module-reports/modules/core/public/views/partials/events/list.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/events/list.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} events - The events collection
+{% enddoc %}
Events
{{ events.results.size }} / {{ events.total_entries }}
diff --git a/pos-module-reports/modules/core/public/views/partials/events/show.liquid b/pos-module-reports/modules/core/public/views/partials/events/show.liquid
index 2561104..665a505 100644
--- a/pos-module-reports/modules/core/public/views/partials/events/show.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/events/show.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
Event
-
<< List
+
<< List
{% render 'modules/core/events/event_card', event: event %}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/.keep b/pos-module-reports/modules/core/public/views/partials/lib/commands/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send.liquid b/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send.liquid
index e6ad1be..f03248b 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/email/send instead of modules/core/lib/commands/email/send', type: 'DEPRECATION'
function object = 'modules/core/commands/email/send/build', object: object
@@ -8,8 +11,8 @@
if r.errors
log r.errors, type: 'errors.graphql.invalid'
- hash_assign object['valid'] = false
- hash_assign object['errors'] = r.errors
+ assign object.valid = false
+ assign object.errors = r.errors
endif
else
log object.errors, type: 'payload validation error in core: lib/commands/email'
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send/check.liquid b/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send/check.liquid
index 83f4269..50c8aec 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send/check.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/commands/email/send/check.liquid
@@ -1,13 +1,16 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'from', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'to', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'layout', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'partial', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/alter.liquid b/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/alter.liquid
index 3418a8a..43fbfa5 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/alter.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/alter.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix and _alter suffix.
- params_to_modify: object
- the object that will be passed to the alter hook to modify
- params: object
- the object that will be passed to the alter hook to give extra information
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {object} params_to_modify - The object to be modified by the alter hook
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/hook/alter instead of modules/core/lib/commands/hook/alter', type: 'DEPRECATION'
assign original_params = params_to_modify | deep_clone
@@ -17,6 +14,6 @@
function _ = implementation.path, params_to_modify: params_to_modify, params: params
endfor
- assign result = '{}' | parse_json | hash_merge: original_params: original_params
+ assign result = { "original_params": original_params }
return result
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/fire.liquid b/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/fire.liquid
index 5af969b..48cd149 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/fire.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/commands/hook/fire.liquid
@@ -1,16 +1,13 @@
-{% comment %}
- hook: string
- the hook name without hook_ prefix.
- params: object
- the object to pass to the fired hook
- merge_to_object boolean
- merge the result objects to one object or collect them in an array
-{% endcomment %}
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+ @param {object} params - Parameters to pass to the hook
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
{% liquid
if merge_to_object
- assign results = '{}' | parse_json
+ assign results = {}
else
- assign results = '[]' | parse_json
+ assign results = []
endif
assign hook = '/hook_' | append: hook
@@ -24,7 +21,7 @@
endcomment
if hook_result[0]
for h_result in hook_result
- assign results = results | add_to_array: h_result
+ assign results << h_result
endfor
comment
Check if the result is an object.
@@ -32,7 +29,7 @@
elsif hook_result.first and merge_to_object
assign results = results | hash_merge: hook_result
else
- assign results = results | add_to_array: hook_result
+ assign results << hook_result
endif
endif
endfor
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/commands/variable/set.liquid b/pos-module-reports/modules/core/public/views/partials/lib/commands/variable/set.liquid
index ddf03fb..dc2577b 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/commands/variable/set.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/commands/variable/set.liquid
@@ -1,8 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - value string
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/commands/variable/set instead of modules/core/lib/commands/variable/set', type: 'DEPRECATION'
graphql result = 'modules/core/variable/set', name: name, value: value
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/helpers/register_error.liquid b/pos-module-reports/modules/core/public/views/partials/lib/helpers/register_error.liquid
index 2f252ef..f016b3e 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/helpers/register_error.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/helpers/register_error.liquid
@@ -1,11 +1,9 @@
-{% comment %}
- @params
- contract - { errors: {}, valid: true }
- field_name
- message:
- key: i18n to be resolved into message
-{% endcomment %}
-
+{% doc %}
+ @param {object} contract - The contract object for collecting errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
assign key = key | default: null
assign message = message | default: null
@@ -17,11 +15,12 @@
assign errors = contract.errors
- assign field_errors = errors[field_name] | default: '[]' | parse_json
- assign field_errors = field_errors | add_to_array: msg
+ assign default = []
+ assign field_errors = errors[field_name] | default: default
+ assign field_errors << msg
- hash_assign errors[field_name] = field_errors
- hash_assign contract['valid'] = false
+ assign errors[field_name] = field_errors
+ assign contract.valid = false
return contract
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/hooks/.keep b/pos-module-reports/modules/core/public/views/partials/lib/hooks/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/.keep b/pos-module-reports/modules/core/public/views/partials/lib/queries/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/headscripts/search.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
index e1ef6d8..72607a4 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/headscripts/search.liquid
@@ -1,6 +1,9 @@
+{% doc %}
+ @param {boolean} merge_to_object - If true, merge results into one object instead of collecting in an array
+{% enddoc %}
{% liquid
log 'Use queries/headscripts/search instead of lib/queries/headscripts/search', type: 'DEPRECATION'
- function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object
+ function headscript_implementations = 'modules/core/lib/commands/hook/fire', hook: 'headscripts', merge_to_object: merge_to_object, params: null
assign results = headscript_implementations | join: ''
return results | html_safe
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/hook/search.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/hook/search.liquid
index da311bb..f97ad06 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/hook/search.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/hook/search.liquid
@@ -1,10 +1,6 @@
-{% comment %}
- Get a list of all hook impltementation paths.
- Params:
- - hook: string
- the hook's name with '/' prefix for example '/hook_user_create'.
-{% endcomment %}
-
+{% doc %}
+ @param {string} hook - The hook name without hook_ prefix
+{% enddoc %}
{% liquid
log 'Use modules/core/queries/hook/search instead of modules/core/lib/queries/hook/search', type: 'DEPRECATION'
graphql implementations = 'modules/core/hook/search', hook: hook
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/module/exists.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/module/exists.liquid
index c91e5f1..9801f78 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/module/exists.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/module/exists.liquid
@@ -1,9 +1,7 @@
-{% comment %}
- Required params:
- - name string
- - type string (optional)
- it can be: module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
function modules = 'modules/core/lib/queries/registry/search', type: type
assign module = modules | array_detect: machine_name: name
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/get.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/get.liquid
index 14e34d1..adbdeda 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/get.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/get.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function registry = 'modules/core/lib/queries/registry/search', type: type
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/search.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/search.liquid
index 9c2cb22..ae8f96c 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/search.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/registry/search.liquid
@@ -1,25 +1,23 @@
-{% comment %}
- Required params:
- - type string
- it can be: all, module, theme
-{% endcomment %}
+{% doc %}
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
- function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false
+ function registry = 'modules/core/lib/commands/hook/fire', hook: 'module_info', merge_to_object: false, params: null
case type
when 'module'
- assign modules = '[]' | parse_json
+ assign modules = []
for module in registry
if module.type == 'module'
- assign modules = modules | add_to_array: module
+ assign modules << module
endif
endfor
return modules
when 'theme'
- assign themes = '[]' | parse_json
+ assign themes = []
for module in registry
if module.type == 'theme'
- assign themes = themes | add_to_array: module
+ assign themes << module
endif
endfor
return themes
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/find.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/find.liquid
index b7012e3..c2ec54c 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/find.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/find.liquid
@@ -1,11 +1,8 @@
-{% comment %}
- Required params:
- - name string
- - default any
- the default vaue of the variable
- - type string (optional)
- it can be: array, integer, float, boolean, object
-{% endcomment %}
+{% doc %}
+ @param {string} default - The default value
+ @param {string} type - The type identifier
+ @param {string} name - The name identifier
+{% enddoc %}
{% liquid
assign value = context.constants[name] | default: default, allow_false: true
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/get.liquid b/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/get.liquid
index 6651eb2..f6ba482 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/get.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/queries/variable/get.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} default - The default value
+ @param {string} name - The name identifier
+ @param {string} type - The type identifier
+{% enddoc %}
{% liquid
# TODO: remove after rewriting dependent modules
function res = 'modules/core/lib/queries/variable/find', name: name, default: default, type: type
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/date.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/date.liquid
index 206eccf..e4d6a7b 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/date.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/date.liquid
@@ -1,10 +1,21 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @date
- @can_be_past
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} can_be_future - Whether the date can be in the future
+ @param {boolean} can_be_past - Whether the date can be in the past
+ @param {string} date - The date to validate
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message_can_be_future - Custom error message for can_be_future validation
+ @param {string} message_can_be_past - Custom error message for can_be_past validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/date instead of modules/core/lib/validations/date ', type: 'DEPRECATION'
assign date = date | default: object[field_name] | to_date
@@ -20,12 +31,12 @@
if can_be_past == false and is_past
assign message = message_can_be_past | default: 'modules/core/validation.date.can_be_past' | t: count: can_be_past, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if can_be_future == false and is_future
assign message = message_can_be_future | default: 'modules/core/validation.date.can_be_future' | t: count: can_be_future, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lt != null
@@ -33,7 +44,7 @@
if date >= lt
assign localized_date = lt | l
assign message = message_lt | default: 'modules/core/validation.date.lt' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -42,7 +53,7 @@
if date > lte
assign localized_date = lte | l
assign message = message_lte | default: 'modules/core/validation.date.lte' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -51,7 +62,7 @@
if date <= gt
assign localized_date = gt | l
assign message = message_gt | default: 'modules/core/validation.date.gt' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
@@ -60,7 +71,7 @@
if date < gte
assign localized_date = gte | l
assign message = message_gte | default: 'modules/core/validation.date.gte' | t: date: localized_date, value: date
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/each_element_length.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/each_element_length.liquid
index 371c397..2c7f107 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/each_element_length.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/each_element_length.liquid
@@ -1,11 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {number} minimum - Minimum allowed value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/each_element_length instead of modules/core/lib/validations/each_element_length ', type: 'DEPRECATION'
for el in object[field_name]
@@ -14,18 +14,18 @@
if minimum != null and size < minimum
assign message = 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = 'modules/core/validation.length.maximum' | t: count: maximum, value: size
assign message = el | append: ' ' | append: message
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endfor
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/elements_included.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/elements_included.liquid
index ef06223..bd8035b 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/elements_included.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/elements_included.liquid
@@ -1,18 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/elements_included instead of modules/core/lib/validations/elements_included ', type: 'DEPRECATION'
for val in object[field_name]
unless array contains val
assign key = key | default: "modules/core/validation.array.not_included"
assign message = key | t: value: val
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endunless
endfor
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/email.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/email.liquid
index 2248f8f..6699b19 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/email.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/email.liquid
@@ -1,16 +1,15 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/email instead of modules/core/lib/validations/email ', type: 'DEPRECATION'
assign valid_email = object[field_name] | is_email_valid
unless valid_email
assign key = key | default: "modules/core/validation.email"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/equal.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/equal.liquid
index 7d5bf65..97284b8 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/equal.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/equal.liquid
@@ -1,9 +1,12 @@
-{% comment %}
- params: @given
- @expected
- @field_name
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} expected - The expected value to compare against
+ @param {string} field_name - The name of the field to validate
+ @param {string} given - The given value to compare
+ @param {string} key - The translation key for the error message
+ @param {string} message - Custom error message override
+ @param {boolean} not_verbose - If true, suppress detailed error output
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/equal instead of modules/core/lib/validations/equal ', type: 'DEPRECATION'
if given != expected
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/exist_in_db.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
index 37808b0..c86b2fc 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/exist_in_db.liquid
@@ -1,17 +1,17 @@
-{% comment %}
- params: @field_name
- @property_name
- @property_value
- @scope_name
- @scope_value
- @exclude_name
- @exclude_value
- @ids
- @not_ids
- @table
- @key
- @c
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} exclude_value - The property value to exclude
+ @param {string} ids - List of record IDs to include
+ @param {string} key - The translation key for the error message
+ @param {string} not_ids - List of record IDs to exclude
+ @param {string} property_name - The property name to check
+ @param {string} property_value - The property value to check
+ @param {string} scope_name - The scope property name for filtering
+ @param {string} scope_value - The scope property value for filtering
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/exist_in_db instead of modules/core/lib/validations/exist_in_db ', type: 'DEPRECATION'
assign property_name = property_name | default: ''
@@ -26,7 +26,7 @@
assign count = r.records.total_entries
if count == 0
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/hcaptcha.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
index f936542..7693b5a 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/hcaptcha.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @hcaptcha_params
- @key
- @c
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/hcaptcha instead of modules/core/lib/validations/hcaptcha ', type: 'DEPRECATION'
assign hcaptcha_solved = hcaptcha_params | hcaptcha
unless hcaptcha_solved
assign key = key | default: "modules/core/validation.hcaptcha"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'hcaptcha', key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/included.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/included.liquid
index a194d71..85b4d16 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/included.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/included.liquid
@@ -1,17 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @array
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {string} array - The array of allowed values
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/included instead of modules/core/lib/validations/included ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
unless array contains value
assign key = key | default: "modules/core/validation.not_included"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/length.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/length.liquid
index 2e440d5..403a064 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/length.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/length.liquid
@@ -1,14 +1,17 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
- @message_minimum
- @message_maximum
- @message_is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {number} is - Exact value to match
+ @param {number} maximum - Maximum allowed value
+ @param {string} message_blank - Custom error message for blank validation
+ @param {string} message_is - Custom error message for is validation
+ @param {string} message_maximum - Custom error message for maximum validation
+ @param {string} message_minimum - Custom error message for minimum validation
+ @param {number} minimum - Minimum allowed value
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/length instead of modules/core/lib/validations/length ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
@@ -23,23 +26,23 @@
if allow_blank != true
if size == blank
assign message = message_blank | default: 'modules/core/validation.length.blank' | t
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
endif
if minimum != null and size < minimum
assign message = message_minimum | default: 'modules/core/validation.length.minimum' | t: count: minimum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if maximum != null and size > maximum
assign message = message_maximum | default: 'modules/core/validation.length.maximum' | t: count: maximum, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if is != null and size != is
assign message = message_is | default: 'modules/core/validation.length.is' | t: count: is, value: size
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/matches.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/matches.liquid
index 9127098..fb47b05 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/matches.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/matches.liquid
@@ -1,10 +1,11 @@
-{% comment %}
- params: @object
- @field_name
- @regexp
- @c
- @message
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} regexp - The regular expression pattern to match against
+ @param {boolean} allow_blank - Whether blank values are allowed
+ @param {string} message - Custom error message override
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/matches instead of modules/core/lib/validations/matches ', type: 'DEPRECATION'
if allow_blank and object[field_name] == blank
@@ -14,7 +15,7 @@
assign matches = object[field_name] | matches: regexp
if matches != true
assign message = message | default: 'modules/core/validation.matches' | t
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/not_null.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/not_null.liquid
index f7bb4c6..23d6bd0 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/not_null.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/not_null.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/not_null instead of modules/core/lib/validations/not_null ', type: 'DEPRECATION'
if object[field_name] == null
assign key = key | default: "modules/core/validation.null"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/number.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/number.liquid
index 77368ba..6a11fe0 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/number.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/number.liquid
@@ -1,15 +1,22 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @number
- @lt - less than
- @lte - less than or equal
- @gt - greater than
- @gte - greater than or equal
- @eq - equal
- @ne - not equal
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {number} eq - Must be equal to this value
+ @param {number} gt - Must be greater than this value
+ @param {number} gte - Must be greater than or equal to this value
+ @param {number} lt - Must be less than this value
+ @param {number} lte - Must be less than or equal to this value
+ @param {string} message - Custom error message override
+ @param {string} message_eq - Custom error message for eq validation
+ @param {string} message_gt - Custom error message for gt validation
+ @param {string} message_gte - Custom error message for gte validation
+ @param {string} message_lt - Custom error message for lt validation
+ @param {string} message_lte - Custom error message for lte validation
+ @param {string} message_ne - Custom error message for ne validation
+ @param {number} ne - Must not be equal to this value
+ @param {number} number - The number to validate
+{% enddoc %}
{% liquid
assign number = number | default: object[field_name]
log 'Use modules/core/validations/number instead of modules/core/lib/validations/number ', type: 'DEPRECATION'
@@ -19,7 +26,7 @@
{% liquid
if test1 != test2
assign message = message | default: 'modules/core/validation.number.invalid' | t: value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
return c
endif
@@ -28,7 +35,7 @@
if lt != null and number >= lt
assign message = message_lt | default: 'modules/core/validation.number.lt' | t: count: lt, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if lte == blank
@@ -36,27 +43,27 @@
endif
if number > lte
assign message = message_lte | default: 'modules/core/validation.number.lte' | t: count: lte, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gt != null and number <= gt
assign message = message_gt | default: 'modules/core/validation.number.gt' | t: count: gt, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if gte != null and number < gte
assign message = message_gte | default: 'modules/core/validation.number.gte' | t: count: gte, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if eq != null and number != eq
assign message = message_eq | default: 'modules/core/validation.number.eq' | t: count: eq, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
if ne != null and number == ne
assign message = message_ne | default: 'modules/core/validation.number.ne' | t: count: ne, value: number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, message: message, key: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/password_complexity.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/password_complexity.liquid
index d5848f6..04bb51c 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/password_complexity.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/password_complexity.liquid
@@ -1,33 +1,31 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/password_complexity instead of modules/core/lib/validations/password_complexity ', type: 'DEPRECATION'
assign decoded_pw = object.password
- function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", context: context
+ function complex_password = 'modules/core/lib/queries/variable/find' name: "MODULES/CORE/USE_COMPLEX_PASSWORD", type: "boolean", default: null
if complex_password
assign has_lowercase = decoded_pw | matches: '[a-z]'
unless has_lowercase
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.lowercase', message: null
endunless
assign has_uppercase = decoded_pw | matches: '[A-Z]'
unless has_uppercase
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.uppercase', message: null
endunless
assign has_number = decoded_pw | matches: '\d'
unless has_number
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: 'password', key: 'modules/core/validation.password.number', message: null
endunless
endif
- function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: key: 'modules/core/validation.too_short', allow_blank: null
+ assign message_minimum = 'modules/core/validation.too_short'
+ function c = 'modules/core/lib/validations/length', c: c, object: object, value: decoded_pw, field_name: 'password', maximum: 256, minimum: 6, message_minimum: message_minimum, allow_blank: null, is: null, message_blank: null, message_is: null, message_maximum: null
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/presence.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/presence.liquid
index 5d34276..06862bd 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/presence.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/presence.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/presence instead of modules/core/lib/validations/presence ', type: 'DEPRECATION'
if object[field_name] == blank
assign key = key | default: "modules/core/validation.blank"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/truthy.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/truthy.liquid
index 0efd280..9b2a93e 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/truthy.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/truthy.liquid
@@ -1,15 +1,14 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @key[optional]
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/truthy instead of modules/core/lib/validations/truthy ', type: 'DEPRECATION'
unless object[field_name]
assign key = key | default: "modules/core/validation.not_truthy"
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endunless
return c
%}
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/unique_elements.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/unique_elements.liquid
index 3eb74e5..f052483 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/unique_elements.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/unique_elements.liquid
@@ -1,18 +1,16 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @minimum
- @maximum
- @is
-{% endcomment %}
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} key - The translation key for the error message
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/unique_elements instead of modules/core/lib/validations/unique_elements ', type: 'DEPRECATION'
assign unique_count = object[field_name] | uniq | size
if unique_count != object[field_name].size
assign key = key | default: 'modules/core/validation.array.not_unique'
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
return c
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/uniqueness.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/uniqueness.liquid
index 3942836..66d62c7 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/uniqueness.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/uniqueness.liquid
@@ -1,3 +1,12 @@
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} table - The database table name
+ @param {string} exclude_name - The property name to exclude
+ @param {string} key - The translation key for the error message
+ @param {string} scope_name - The scope property name for filtering
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/uniqueness instead of modules/core/lib/validations/uniqueness ', type: 'DEPRECATION'
assign key = key | default: 'modules/core/validation.taken'
@@ -22,7 +31,7 @@
assign count = r.records.total_entries
if count > 0
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: key, message: null
endif
endif
return c
diff --git a/pos-module-reports/modules/core/public/views/partials/lib/validations/valid_object.liquid b/pos-module-reports/modules/core/public/views/partials/lib/validations/valid_object.liquid
index 7b1b317..690addf 100644
--- a/pos-module-reports/modules/core/public/views/partials/lib/validations/valid_object.liquid
+++ b/pos-module-reports/modules/core/public/views/partials/lib/validations/valid_object.liquid
@@ -1,19 +1,19 @@
-{% comment %}
- params: @object
- @field_name
- @c
- @check_function
-{% endcomment %}
-
+{% doc %}
+ @param {object} c - The contract object for collecting validation errors
+ @param {string} check_function - The validation function to call
+ @param {string} field_name - The name of the field to validate
+ @param {object} object - The object to process
+ @param {string} value - The value
+{% enddoc %}
{% liquid
log 'Use modules/core/validations/valid_object instead of modules/core/lib/validations/valid_object ', type: 'DEPRECATION'
assign value = value | default: object[field_name]
if value
function check_object = check_function, object: value
if check_object.valid != true
- function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid'
+ function c = 'modules/core/lib/helpers/register_error', contract: c, field_name: field_name, key: 'modules/core/validation.invalid', message: null
assign errors_key = field_name | append: '_errors'
- hash_assign c['errors'][errors_key] = check_object.errors
+ assign c.errors[errors_key] = check_object.errors
endif
endif
diff --git a/pos-module-reports/modules/core/template-values.json b/pos-module-reports/modules/core/template-values.json
index 14c97e6..d386e90 100644
--- a/pos-module-reports/modules/core/template-values.json
+++ b/pos-module-reports/modules/core/template-values.json
@@ -2,6 +2,6 @@
"name": "Pos Module Core",
"machine_name": "core",
"type": "module",
- "version": "2.0.6",
+ "version": "2.1.5",
"dependencies": {}
}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/create.liquid
deleted file mode 100644
index 357e82c..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create.liquid
+++ /dev/null
@@ -1,9 +0,0 @@
-{% liquid
- function object = 'modules/profile/commands/profiles/create/build', object: object, name: null
- function object = 'modules/profile/commands/profiles/create/check', object: object
- if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/profile/profiles/create', object: object
- assign object = object | hash_merge: object.properties
- endif
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create/build.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/create/build.liquid
deleted file mode 100644
index bdb30ef..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create/build.liquid
+++ /dev/null
@@ -1,10 +0,0 @@
-{% liquid
- function tokenized_names = 'modules/profile/commands/profiles/tokenize_names', object: object
- assign uuid_new = '' | uuid
- assign uuid = object.uuid | default: uuid_new
- assign name = object.first_name | append: ' ' | append: object.last_name
-
- assign data = null | hash_merge: first_name: object.first_name, last_name: object.last_name, user_id: object.user_id, email: object.email, uuid: uuid, name: name, c__names: tokenized_names
-
- return data
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create/check.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/create/check.liquid
deleted file mode 100644
index 264d314..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create/check.liquid
+++ /dev/null
@@ -1,15 +0,0 @@
-{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
-
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'user_id'
- function table = 'modules/profile/helpers/table_name'
- function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'user_id', table: table, scope_name: null, exclude_name: null
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'uuid'
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'name', maximum: 80, allow_blank: null
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'first_name', maximum: 40, allow_blank: null
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'last_name', maximum: 40, allow_blank: null
-
- assign object = object | hash_merge: c
-
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate.liquid
deleted file mode 100644
index 39cfa19..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate.liquid
+++ /dev/null
@@ -1,6 +0,0 @@
-{% liquid
- function object = 'modules/profile/commands/profiles/create/build', object: object, name: null
- function object = 'modules/profile/commands/profiles/create/check', object: object
-
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/delete.liquid
deleted file mode 100644
index 635c481..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete.liquid
+++ /dev/null
@@ -1,8 +0,0 @@
-{% liquid
- function object = 'modules/profile/commands/profiles/delete/build', object: object
- function object = 'modules/profile/commands/profiles/delete/check', object: object
- if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/profile/profiles/delete', object: object
- endif
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete/build.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/delete/build.liquid
deleted file mode 100644
index d10a19e..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete/build.liquid
+++ /dev/null
@@ -1,5 +0,0 @@
-{% liquid
- assign data = null | hash_merge: id: object.id
-
- return data
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete_proxy.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/delete_proxy.liquid
deleted file mode 100644
index 91a5cba..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/delete_proxy.liquid
+++ /dev/null
@@ -1,6 +0,0 @@
-{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
- assign function_name = profile_module | append: '/commands/profiles/delete'
- function profile = function_name, object: object
- return profile
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/tokenize_names.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/tokenize_names.liquid
deleted file mode 100644
index f4b04c8..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/tokenize_names.liquid
+++ /dev/null
@@ -1,4 +0,0 @@
-{% liquid
- assign tokenized_names = '[]' | parse_json | array_add: object.email | array_add: object.first_name | array_add: object.last_name | compact | uniq | join: ' ' | downcase
- return tokenized_names
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/update.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/update.liquid
deleted file mode 100644
index 13e80f9..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/update.liquid
+++ /dev/null
@@ -1,10 +0,0 @@
-{% liquid
- function object = 'modules/profile/commands/profiles/update/build', object: object, profile: profile, name: null
- function object = 'modules/profile/commands/profiles/update/check', object: object
-
- if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/profile/profiles/update', object: object
- assign object = object | hash_merge: object.properties
- endif
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/update/build.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/update/build.liquid
deleted file mode 100644
index 5cb50bb..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/update/build.liquid
+++ /dev/null
@@ -1,8 +0,0 @@
-{% liquid
- function tokenized_names = 'modules/profile/commands/profiles/tokenize_names', object: object
- assign name = object.first_name | append: ' ' | append: object.last_name
-
- assign data = null | hash_merge: id: profile.id, first_name: object.first_name, last_name: object.last_name, name: name, c__names: tokenized_names, email: object.email
-
- return data
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/update/check.liquid b/pos-module-reports/modules/profile/public/lib/commands/profiles/update/check.liquid
deleted file mode 100644
index 2c4f66d..0000000
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/update/check.liquid
+++ /dev/null
@@ -1,14 +0,0 @@
-{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
-
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'email', table: 'modules/profile/profile', scope_name: null, exclude_name: null
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'name', maximum: 80, allow_blank: null
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'first_name', maximum: 40, allow_blank: null
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'last_name', maximum: 40, allow_blank: null
-
-
- assign object = object | hash_merge: c
-
- return object
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/helpers/current_profile.liquid b/pos-module-reports/modules/profile/public/lib/helpers/current_profile.liquid
deleted file mode 100644
index 7ef1730..0000000
--- a/pos-module-reports/modules/profile/public/lib/helpers/current_profile.liquid
+++ /dev/null
@@ -1,11 +0,0 @@
-{% liquid
- function user = 'modules/user/queries/user/current'
- if user.id
- function current_profile = 'modules/profile/queries/profiles/find', user_id: user.id, id: null, uuid: null, first_name: null, last_name: null
- endif
-
- assign current_profile = current_profile | hash_merge: roles: user.roles, permissions: user.permissions, user: user
-
- export current_profile
- return current_profile
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/helpers/profiles/slugs/build.liquid b/pos-module-reports/modules/profile/public/lib/helpers/profiles/slugs/build.liquid
deleted file mode 100644
index 58033ea..0000000
--- a/pos-module-reports/modules/profile/public/lib/helpers/profiles/slugs/build.liquid
+++ /dev/null
@@ -1,8 +0,0 @@
-{% liquid
- assign profile = profile | default: current_profile
- assign first_name = profile.first_name | default: current_profile.properties.first_name
- assign last_name = profile.last_name | default: current_profile.properties.last_name
- assign slug = first_name | append: '-' | append: last_name | append: '-' | append: profile.id | slugify
-
- return slug
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/filters.liquid b/pos-module-reports/modules/profile/public/lib/queries/profiles/filters.liquid
deleted file mode 100644
index 0e490b4..0000000
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/filters.liquid
+++ /dev/null
@@ -1,15 +0,0 @@
-{% parse_json sort_options %}
-{
- "first_name_desc": { "properties": { "name": "first_name", "order": "DESC" }},
- "first_name_desc": { "properties": { "name": "first_name", "order": "ASC" }}
-}
-{% endparse_json %}
-{% liquid
- assign filters = '{}' | parse_json
- hash_assign filters['page'] = params.page | to_positive_integer: 1
- hash_assign filters['keyword'] = params.keyword | default: ''
- hash_assign filters['sort_by'] = params.sort_by | default: 'first_name_desc'
- hash_assign filters['sort'] = sort_options[filters.sort_by]
-
- return filters
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/find.liquid b/pos-module-reports/modules/profile/public/lib/queries/profiles/find.liquid
deleted file mode 100644
index d1b78e0..0000000
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/find.liquid
+++ /dev/null
@@ -1,18 +0,0 @@
-{% liquid
- if user_id == blank and id == blank and uuid == blank
- log 'ERROR: missing ID argument in modules/profile/queries/profile/find'
- return nil
- endif
-
- graphql result = 'modules/profile/profiles/search', user_id: user_id, id: id, first_name: first_name, last_name: last_name, uuid: uuid, limit: 1, page: 1
- assign profile = result.records.results.first
-
- if profile
- function slug = 'modules/profile/helpers/profiles/slugs/build' , current_profile: profile
- hash_assign profile['properties']['slug'] = slug
- assign profile = profile | hash_merge: profile.properties
- endif
-
-
- return profile
-%}
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/search.liquid b/pos-module-reports/modules/profile/public/lib/queries/profiles/search.liquid
deleted file mode 100644
index 7b959d6..0000000
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/search.liquid
+++ /dev/null
@@ -1,22 +0,0 @@
-{% liquid
- assign page = page | to_positive_integer: 1
- if not_ids == blank
- assign not_ids = null
- endif
-
- graphql r = 'modules/profile/profiles/search', limit: limit, uuid: uuid, id: id, ids: ids, first_name: first_name , last_name: last_name , user_id: user_id, not_ids: not_ids, query: query, emails: emails, sort: sort, page: page
-
- assign records = r.records
- assign profiles = '[]' | parse_json
- for profile in records.results
- function slug = 'modules/profile/helpers/profiles/slugs/build' , current_profile: profile
- hash_assign profile['properties']['slug'] = slug
- assign p = profile | hash_merge: profile.properties
-
- assign profiles = profiles | array_add: p
- endfor
- hash_assign records['results'] = profiles
-
- return records
-%}
-
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/search_proxy.liquid b/pos-module-reports/modules/profile/public/lib/queries/profiles/search_proxy.liquid
deleted file mode 100644
index 55a436b..0000000
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/search_proxy.liquid
+++ /dev/null
@@ -1,7 +0,0 @@
-{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
- assign function_name = profile_module | append: '/queries/profiles/search'
- function profile = function_name, limit: limit, uuid: uuid, id: id, ids: ids, first_name: first_name, last_name: last_name, user_id: user_id, not_ids: not_ids, query: query, emails: emails, sort: sort, page: page, filters: filters
-
- return profile
-%}
diff --git a/pos-module-reports/modules/profile/template-values.json b/pos-module-reports/modules/profile/template-values.json
deleted file mode 100644
index 484ccbb..0000000
--- a/pos-module-reports/modules/profile/template-values.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "name": "Profile",
- "machine_name": "profile",
- "type": "module",
- "version": "1.1.1",
- "dependencies": {
- "core": "^1.0.0",
- "user": "^3.0.0"
- }
-}
diff --git a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content.liquid b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content.liquid
index 8bd5006..31a9763 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content.liquid
@@ -1,9 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} creator_id - The ID of the creator
+{% enddoc %}
{% liquid
function object = 'modules/reports/commands/documents/create_with_content/build', object: object, creator_id: creator_id
function object = 'modules/reports/commands/documents/create_with_content/check', object: object
if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/documents/create_with_content' object: object
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/documents/create_with_content', object: object, selection: null
endif
return object
diff --git a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/build.liquid b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/build.liquid
index 1ab15e9..9095485 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/build.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/build.liquid
@@ -1,12 +1,9 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {string} creator_id - The ID of the creator
+{% enddoc %}
{% liquid
- assign output = '{}' | parse_json
-
- hash_assign output['content'] = object.content
- hash_assign output['document_type'] = object.document_type
- hash_assign output['object_uuid'] = object.object_uuid
- hash_assign output['content_type'] = object.content_type
- hash_assign output['content_disposition'] = object.content_disposition
- hash_assign output['creator_id'] = creator_id
+ assign output = { "content": object.content, "document_type": object.document_type, "object_uuid": object.object_uuid, "content_type": object.content_type, "content_disposition": object.content_disposition, "creator_id": creator_id }
return output
-%}
+ %}
diff --git a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/check.liquid b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/check.liquid
index 0adf4aa..053d544 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/check.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/documents/create_with_content/check.liquid
@@ -1,12 +1,15 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'object_uuid'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'document_type'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'creator_id'
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'content', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'object_uuid', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'document_type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'creator_id', key: null
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/reports/public/lib/commands/reports/create.liquid b/pos-module-reports/modules/reports/public/lib/commands/reports/create.liquid
index a6b161b..6f1b0b6 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/reports/create.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/reports/create.liquid
@@ -1,9 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
function object = 'modules/reports/commands/reports/create/build', object: object
function object = 'modules/reports/commands/reports/create/check', object: object
if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/reports/create', object: object
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/reports/create', object: object, selection: null
endif
return object
diff --git a/pos-module-reports/modules/reports/public/lib/commands/reports/create/build.liquid b/pos-module-reports/modules/reports/public/lib/commands/reports/create/build.liquid
index 279015a..f9c2ac4 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/reports/create/build.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/reports/create/build.liquid
@@ -1,5 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
assign created_at = 'now' | to_time: 'UTC' | strftime: "%Y-%m-%dT%H:%M:%S%Z"
- assign data = null | hash_merge: uuid: object.uuid, creator_id: object.creator_id, user_id: object.user_id, operation_type: object.operation_type, operation_model: object.operation_model, options: object.options, created_at: created_at, retrieve_all_command: object.retrieve_all_command
+ assign data = {"uuid": object.uuid, "creator_id": object.creator_id, "user_id": object.user_id, "operation_type": object.operation_type, "operation_model": object.operation_model, "options": object.options, "created_at": created_at, "retrieve_all_command": object.retrieve_all_command}
return data
%}
diff --git a/pos-module-reports/modules/reports/public/lib/commands/reports/create/check.liquid b/pos-module-reports/modules/reports/public/lib/commands/reports/create/check.liquid
index fbf8255..8f749e8 100644
--- a/pos-module-reports/modules/reports/public/lib/commands/reports/create/check.liquid
+++ b/pos-module-reports/modules/reports/public/lib/commands/reports/create/check.liquid
@@ -1,23 +1,28 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'uuid'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'operation_type'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'operation_model'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'user_id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'creator_id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'created_at'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'retrieve_all_command'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'uuid', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'operation_type', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'operation_model', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'user_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'creator_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'created_at', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'retrieve_all_command', key: null
if object.options
try
- hash_assign object['options'] = object.options | parse_json | json
+ assign object.options = object.options | parse_json | json
catch err
- hash_assign object['options'] = null
+ assign object.options = null
endtry
endif
- assign object = object | hash_merge: c
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/reports/public/lib/consumers/report_requested/trigger_export.liquid b/pos-module-reports/modules/reports/public/lib/consumers/report_requested/trigger_export.liquid
index 4064b8c..2007197 100644
--- a/pos-module-reports/modules/reports/public/lib/consumers/report_requested/trigger_export.liquid
+++ b/pos-module-reports/modules/reports/public/lib/consumers/report_requested/trigger_export.liquid
@@ -1,7 +1,11 @@
+{% doc %}
+ @param {string} object_id - The report object ID
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
graphql g = 'modules/reports/reports/search', id: object_id
assign operation = g.reports.results.first
- function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.started', reference_id: operation.id, requester_id: 'report'
+ function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.started', reference_id: operation.id, requester_id: 'report', payload: null, delay: null, max_attempts: null, reference_schema: null, timestamp: null
function results = operation.retrieve_all_command
if operation.file_name
@@ -11,14 +15,14 @@
endif
assign content_disposition = "attachment; filename=" | append: file_name | append: ";"
- assign object_payload = '{}' | parse_json | hash_merge: content: results, object_uuid: operation.uuid, document_type: 'file', content_type: "text/csv; charset=UTF-8", content_disposition: content_disposition
+ assign object_payload = { "content": results, "object_uuid": operation.uuid, "document_type": "file", "content_type": "text/csv; charset=UTF-8", "content_disposition": content_disposition }
function document = 'modules/reports/commands/documents/create_with_content', object: object_payload, creator_id: operation.creator_id
if document.valid
- function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.done', reference_id: operation.id, requester_id: 'report'
- assign object_payload = '{}' | parse_json | hash_merge: creator_id: operation.creator_id, user_id: operation.user_id, object_id: operation.id, document_id: document.id, app_host: event.app_host
- function _event = 'modules/core/commands/events/publish', type: 'report_completed', object: object_payload
+ function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.done', reference_id: operation.id, requester_id: 'report', payload: null, delay: null, max_attempts: null, reference_schema: null, timestamp: null
+ assign object_payload = { "creator_id": operation.creator_id, "user_id": operation.user_id, "object_id": operation.id, "document_id": document.id, "app_host": event.app_host }
+ function _event = 'modules/core/commands/events/publish', type: 'report_completed', object: object_payload, delay: null, max_attempts: null
else
log document, type: 'ERROR: trigger_export document'
- function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.error', reference_id: operation.id, requester_id: 'report'
+ function res = 'modules/core/commands/statuses/create', name: 'modules/reports/statuses.report.error', reference_id: operation.id, requester_id: 'report', payload: null, delay: null, max_attempts: null, reference_schema: null, timestamp: null
endif
%}
diff --git a/pos-module-reports/modules/reports/public/lib/consumers/status_created/update_report_status.liquid b/pos-module-reports/modules/reports/public/lib/consumers/status_created/update_report_status.liquid
index 532767b..5b75acb 100644
--- a/pos-module-reports/modules/reports/public/lib/consumers/status_created/update_report_status.liquid
+++ b/pos-module-reports/modules/reports/public/lib/consumers/status_created/update_report_status.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign object = '{}' | parse_json
+ assign object = {}
if event.name contains 'modules/reports/statuses.report'
- hash_assign object['id'] = event.reference_id
+ assign object.id = event.reference_id
assign short_name = event.name | replace: 'modules/reports/statuses.report.', ''
- hash_assign object['status'] = short_name
+ assign object.status = short_name
- function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/reports/update_status' object: object
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/reports/reports/update_status', object: object, selection: null
endif
-%}
+ %}
diff --git a/pos-module-reports/modules/reports/public/lib/events/report_completed.liquid b/pos-module-reports/modules/reports/public/lib/events/report_completed.liquid
index b35cde6..6b8ccdf 100644
--- a/pos-module-reports/modules/reports/public/lib/events/report_completed.liquid
+++ b/pos-module-reports/modules/reports/public/lib/events/report_completed.liquid
@@ -6,13 +6,16 @@ metadata:
document_id
app_host
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'creator_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'object_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'document_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'app_host'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'creator_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'object_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'document_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'app_host', key: null
return c
%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/reports/public/lib/events/report_requested.liquid b/pos-module-reports/modules/reports/public/lib/events/report_requested.liquid
index 87c4319..c083597 100644
--- a/pos-module-reports/modules/reports/public/lib/events/report_requested.liquid
+++ b/pos-module-reports/modules/reports/public/lib/events/report_requested.liquid
@@ -5,11 +5,14 @@ metadata:
object_id
app_host
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'object_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'app_host'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'object_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'app_host', key: null
return c
%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/reports/template-values.json b/pos-module-reports/modules/reports/template-values.json
index b9909a9..14c4ae8 100644
--- a/pos-module-reports/modules/reports/template-values.json
+++ b/pos-module-reports/modules/reports/template-values.json
@@ -2,10 +2,10 @@
"name": "Pos Module Reports",
"machine_name": "reports",
"type": "module",
- "version": "1.0.4",
+ "version": "2.0.0",
"dependencies": {
- "core": "^2.0.0",
- "tests": "^1.0.0",
- "user": "^5.0.0"
+ "core": "^2.1.5",
+ "tests": "^1.3.1",
+ "user": "^5.2.7"
}
}
diff --git a/pos-module-reports/modules/tests/public/graphql/sent_mails/search.graphql b/pos-module-reports/modules/tests/public/graphql/sent_mails/search.graphql
new file mode 100644
index 0000000..7ea4a0b
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/graphql/sent_mails/search.graphql
@@ -0,0 +1,20 @@
+query mails($id: ID, $limit: Int = 20, $page: Int = 1) {
+ mails: admin_sent_notifications(
+ per_page: $limit
+ page: $page
+ filter: { id: { value: $id }, notification_type: { value: EMAIL } }
+ sort: { created_at: { order: DESC } }
+ ) {
+ total_entries
+ total_pages
+ current_page
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at
+ content
+ options
+ }
+ }
+}
diff --git a/pos-module-reports/modules/tests/public/graphql/test_files/count.graphql b/pos-module-reports/modules/tests/public/graphql/test_files/count.graphql
new file mode 100644
index 0000000..d507b05
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/graphql/test_files/count.graphql
@@ -0,0 +1,12 @@
+query count_test_partials($path: String, $per_page: Int!){
+ admin_liquid_partials(
+ per_page: $per_page
+ filter: {
+ path: { ends_with: "_test", contains: $path }
+ }
+
+ ) {
+ total_entries
+ total_pages
+ }
+}
diff --git a/pos-module-reports/modules/tests/public/graphql/test_files/search.graphql b/pos-module-reports/modules/tests/public/graphql/test_files/search.graphql
new file mode 100644
index 0000000..0b6bf71
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/graphql/test_files/search.graphql
@@ -0,0 +1,15 @@
+query test_partials($path: String, $per_page: Int = 100, $page: Int = 1){
+ admin_liquid_partials(
+ per_page: $per_page
+ page: $page
+ filter: {
+ path: { ends_with: "_test", contains: $path }
+ }
+
+ ) {
+ total_entries
+ results {
+ path
+ }
+ }
+}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/blank.liquid b/pos-module-reports/modules/tests/public/lib/assertions/blank.liquid
new file mode 100644
index 0000000..02647a9
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/blank.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for blank field
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ unless object[field_name] == blank
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.be_blank', message: null
+ endunless
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/equal.liquid b/pos-module-reports/modules/tests/public/lib/assertions/equal.liquid
new file mode 100644
index 0000000..9b52a08
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/equal.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} given - actual value to compare
+ @param {string} expected - expected value to compare against
+ @param {string} field_name - name of the field being tested
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+
+ if given != expected
+ assign msg = 'modules/tests/should.equal' | t: given: given, expected: expected
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: msg, key: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/invalid_object.liquid b/pos-module-reports/modules/tests/public/lib/assertions/invalid_object.liquid
new file mode 100644
index 0000000..71d0782
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/invalid_object.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check invalidity of
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ if object.valid
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: object.errors, key: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/not_presence.liquid b/pos-module-reports/modules/tests/public/lib/assertions/not_presence.liquid
new file mode 100644
index 0000000..108103a
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/not_presence.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for field absence
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ if object[field_name] != blank
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank', message: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/not_true.liquid b/pos-module-reports/modules/tests/public/lib/assertions/not_true.liquid
new file mode 100644
index 0000000..3db37f2
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/not_true.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object containing the field to check
+ @param {string} field_name - name of the field being tested
+ @param {string} value - value to check for falsiness
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+
+ assign value = value | default: object[field_name]
+ if value
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_true', message: null
+ endif
+
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/not_valid_object.liquid b/pos-module-reports/modules/tests/public/lib/assertions/not_valid_object.liquid
new file mode 100644
index 0000000..62b7d72
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/not_valid_object.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check invalidity of
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ if object.valid == true
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_valid', message: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/object_contains_object.liquid b/pos-module-reports/modules/tests/public/lib/assertions/object_contains_object.liquid
new file mode 100644
index 0000000..92ff495
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/object_contains_object.liquid
@@ -0,0 +1,26 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} given - object to check against
+ @param {object} object_contains - subset that should be contained in given
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+
+ for property in object_contains
+ assign key = property[0]
+ assign value = property[1]
+
+ if given[key] == blank
+ assign message = 'modules/tests/should.have_key' | t: field_name: field_name
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message, key: null
+ else
+ if given[key] != value
+ assign message = 'modules/tests/should.have_key_with_value' | t: value: value
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message, key: null
+ endif
+ endif
+ endfor
+
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/presence.liquid b/pos-module-reports/modules/tests/public/lib/assertions/presence.liquid
new file mode 100644
index 0000000..654355b
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/presence.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for field presence
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ if object[field_name] == blank
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank', message: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/true.liquid b/pos-module-reports/modules/tests/public/lib/assertions/true.liquid
new file mode 100644
index 0000000..396c8d7
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/true.liquid
@@ -0,0 +1,16 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object containing the field to check
+ @param {string} field_name - name of the field being tested
+ @param {string} value - value to check for truthiness
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+
+ assign value = value | default: object[field_name]
+ unless value
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.be_true', message: null
+ endunless
+
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/assertions/valid_object.liquid b/pos-module-reports/modules/tests/public/lib/assertions/valid_object.liquid
new file mode 100644
index 0000000..3c8233b
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/assertions/valid_object.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object to check validity of
+ @param {string} field_name - name of the field being tested
+{% enddoc %}
+{% liquid
+ assign contract.total = contract['total'] | plus: 1
+ if object.valid != true
+ assign message = 'should be valid: ' | append: object.errors
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: message, key: null
+ endif
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/commands/run.liquid b/pos-module-reports/modules/tests/public/lib/commands/run.liquid
new file mode 100644
index 0000000..8b9f928
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/commands/run.liquid
@@ -0,0 +1,50 @@
+{% doc %}
+ @param {string} test_name - name of the test to run
+ @param {string} format - output format for test results
+{% enddoc %}
+{% liquid
+ assign ctx = context
+ assign ctx.tests = true
+ log 'Starting unit tests', type: test_name
+ assign __start = "now" | to_time
+ assign per_page = 100
+ graphql count_result = 'modules/tests/test_files/count', per_page: per_page, path: context.params.name
+ assign total_pages = count_result | dig: "admin_liquid_partials" | dig: "total_pages"
+
+ assign tests = null
+ if tests.size == 0
+ unless format == 'js'
+ echo 'no tests found'
+ endunless
+ endif
+ assign total_errors = 0
+ assign contracts = '' | split: ','
+
+ for page in (1..total_pages)
+ # platformos-check-disable NestedGraphQLQuery
+ graphql search_result = 'modules/tests/test_files/search', path: context.params.name, page: page, per_page: per_page
+ # platformos-check-enable NestedGraphQLQuery
+ assign tests = search_result | dig: "admin_liquid_partials" | dig: "results"
+ for test in tests
+ log test, type: test_name
+ assign contract = { "errors": {}, "success": true, "total": 0 }
+
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
+ include test.path, registry: test.path, contract: contract
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
+ assign contract.test_path = test.path
+ assign contracts << contract
+ assign total_errors = total_errors | plus: contract.errors.size
+ endfor
+ endfor
+ assign __stop = "now" | to_time
+ assign total_duration = __start | time_diff: __stop, 'ms' | round
+
+ assign test_formatter = format | default: 'html' | prepend: 'modules/tests/tests/show_'
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
+ include test_formatter, contracts: contracts, total_errors: total_errors, total_duration: total_duration, test_name: test_name
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
+ if total_errors > 0
+ response_status 500
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/helpers/register_error.liquid b/pos-module-reports/modules/tests/public/lib/helpers/register_error.liquid
new file mode 100644
index 0000000..3519de8
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/helpers/register_error.liquid
@@ -0,0 +1,25 @@
+{% doc %}
+ @param {string} key - i18n key to be resolved into message
+ @param {string} message - error message
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field with error
+{% enddoc %}
+{% liquid
+ assign key = key | default: null
+ assign message = message | default: null
+ if key
+ assign msg = key | t
+ else
+ assign msg = message
+ endif
+
+ assign errors = contract.errors
+
+ assign field_erorrs = errors[field_name] | default: '[]' | parse_json
+ assign field_erorrs << msg
+
+ assign errors[field_name] = field_erorrs
+ assign contract.success = false
+
+ return contract
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/queries/sent_mails/find.liquid b/pos-module-reports/modules/tests/public/lib/queries/sent_mails/find.liquid
new file mode 100644
index 0000000..8f0ffab
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/queries/sent_mails/find.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {string} id - id of the sent mail to find
+{% enddoc %}
+{% liquid
+ if id == blank
+ return null
+ endif
+
+ graphql r = 'modules/tests/sent_mails/search', id: id, limit: 1
+ return r.mails.results.first
+%}
diff --git a/pos-module-reports/modules/tests/public/lib/queries/sent_mails/search.liquid b/pos-module-reports/modules/tests/public/lib/queries/sent_mails/search.liquid
new file mode 100644
index 0000000..648d9c5
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/lib/queries/sent_mails/search.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {number} limit - maximum number of results to return
+ @param {number} page - page number for pagination
+{% enddoc %}
+{% liquid
+ graphql r = 'modules/tests/sent_mails/search', limit: limit, page: page
+ return r.mails
+%}
diff --git a/pos-module-reports/modules/tests/public/translations/en/should.yml b/pos-module-reports/modules/tests/public/translations/en/should.yml
new file mode 100644
index 0000000..6f40d6f
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/translations/en/should.yml
@@ -0,0 +1,16 @@
+en:
+ should:
+ be_false: should be false
+ be_valid: should be valid
+ equal: expected %{given} to equal %{expected}
+ equal_not_verbose: does not match
+ have_key: key should exist in "%{field_name}"
+ have_key_with_value: should have value "%{value}"
+ match: match
+ be_blank: should be blank
+ be_true: should be true
+ not:
+ be_empty: should not be empty
+ be_blank: should not be blank
+ be_valid: should not be valid
+ be_true: should not be true
diff --git a/pos-module-reports/modules/tests/public/views/layouts/mailer.html.liquid b/pos-module-reports/modules/tests/public/views/layouts/mailer.html.liquid
new file mode 100644
index 0000000..9ad2e52
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/layouts/mailer.html.liquid
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+ {% liquid
+ assign url = 'https://' | append: context.location.host
+ %}
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
+
+
diff --git a/pos-module-reports/modules/tests/public/views/layouts/test.liquid b/pos-module-reports/modules/tests/public/views/layouts/test.liquid
new file mode 100644
index 0000000..6b57c72
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/layouts/test.liquid
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+ {{ content_for_layout }}
+
+
+
+
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/index.html.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/index.html.liquid
new file mode 100644
index 0000000..5db7ce8
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/index.html.liquid
@@ -0,0 +1,10 @@
+---
+layout: modules/tests/test
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ graphql tests = 'modules/tests/test_files/search', path: context.params.name | dig: "admin_liquid_partials" | dig: "results"
+
+ render 'modules/tests/tests/index', tests: tests
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/index.js.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/index.js.liquid
new file mode 100644
index 0000000..c3fb479
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/index.js.liquid
@@ -0,0 +1,28 @@
+---
+layout: ''
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ assign per_page = 100
+ graphql total_pages = 'modules/tests/test_files/count', per_page: per_page, path: context.params.name | dig: "admin_liquid_partials" | dig: "total_pages"
+
+ assign result = []
+
+ for page in (1..total_pages)
+ # platformos-check-disable NestedGraphQLQuery
+ graphql tests = 'modules/tests/test_files/search', path: context.params.name, page: page, per_page: per_page | dig: "admin_liquid_partials" | dig: "results"
+ # platformos-check-enable NestedGraphQLQuery
+
+ for test in tests
+ assign test_name = test.path | remove_first: 'lib/test/' | remove_first: '_test'
+ assign test_url = '/_tests/run.js?test_name=' | append: test_name
+ assign test_object = { "name": test_name, "url": test_url }
+ assign result << test_object
+ endfor
+ endfor
+
+ echo result | json
+ else
+ echo '{"error":"Tests can only be accessed in staging or development environment"}'
+ endif
+ %}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/run.html.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/run.html.liquid
new file mode 100644
index 0000000..810c933
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/run.html.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/tests/test
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ assign test_name = 5 | random_string | prepend: "liquid_test_"
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
+ include 'modules/tests/commands/run', format: context.params.formatter, test_name: test_name
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/run.js.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/run.js.liquid
new file mode 100644
index 0000000..6d123ab
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/run.js.liquid
@@ -0,0 +1,13 @@
+---
+layout: ''
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ assign test_name = 5 | random_string | prepend: "liquid_test_"
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
+ include 'modules/tests/commands/run', format: 'js', test_name: test_name
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
+ else
+ echo '{"success":false,"error":"Tests can only be run in staging or development environment"}'
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.js.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.js.liquid
new file mode 100644
index 0000000..aa11aca
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.js.liquid
@@ -0,0 +1,15 @@
+---
+layout: ''
+---
+{% if context.environment == 'staging' or context.environment == 'development' %}
+ {% assign test_name = 5 | random_string | prepend: "liquid_test_" %}
+ {% background source_name: "liquid_tests", test_name: test_name %}
+ {% comment %}platformos-check-disable DeprecatedTag{% endcomment %}
+ {% include 'modules/tests/commands/run', format: 'log_js', test_name: test_name %}
+ {% comment %}platformos-check-enable DeprecatedTag{% endcomment %}
+ {% endbackground %}
+ {% assign result = { "test_name": test_name } %}
+ {{ result }}
+{% else %}
+ {"success":false,"error":"Tests can only be run in staging or development environment"}
+{% endif %}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.liquid
new file mode 100644
index 0000000..791a9e9
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/run_async.liquid
@@ -0,0 +1,12 @@
+---
+layout: ''
+---
+{% if context.environment == 'staging' %}
+ {% assign test_name = 5 | random_string | prepend: "liquid_test_" %}
+ {% background source_name: "liquid_tests", test_name: test_name %}
+ {% comment %}platformos-check-disable DeprecatedTag{% endcomment %}
+ {% include 'modules/tests/commands/run', format: 'log', test_name: test_name %}
+ {% comment %}platformos-check-enable DeprecatedTag{% endcomment %}
+ {% endbackground %}
+ {{ test_name }}
+{% endif %}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/index.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/index.liquid
new file mode 100644
index 0000000..2e5885b
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/index.liquid
@@ -0,0 +1,11 @@
+---
+layout: modules/tests/test
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ assign page = context.params.page | to_positive_integer: 1
+ function mails = 'modules/tests/queries/sent_mails/search', limit: 20, page: page
+
+ render 'modules/tests/sent_mails/list', mails: mails
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/show.liquid b/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/show.liquid
new file mode 100644
index 0000000..5c612fe
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/pages/_tests/sent_mails/show.liquid
@@ -0,0 +1,11 @@
+---
+slug: _tests/sent_mails/:id
+layout: modules/tests/test
+---
+{% liquid
+ if context.environment == 'staging' or context.environment == 'development'
+ function mail = 'modules/tests/queries/sent_mails/find', id: context.params.id
+
+ render 'modules/tests/sent_mails/show', mail: mail
+ endif
+%}
diff --git a/pos-module-reports/modules/tests/public/views/partials/sent_mails/list.liquid b/pos-module-reports/modules/tests/public/views/partials/sent_mails/list.liquid
new file mode 100644
index 0000000..176c391
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/sent_mails/list.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {object} mails - collection of sent mail objects
+{% enddoc %}
+
Sent mails
+
+
+ Subject
+ To
+ Sent at
+
+
+
+ {% for mail in mails.results %}
+
+ {{ mail.options.subject }}
+ {{ mail.options.to | join: ',' }}
+ {{ mail.created_at | l }}
+ Show
+
+ {% endfor %}
+
+
+ {% render 'modules/tests/sent_mails/pagination', collection: mails, container_class: null, button_attrs: null, page_name: null %}
diff --git a/pos-module-reports/modules/tests/public/views/partials/sent_mails/pagination.liquid b/pos-module-reports/modules/tests/public/views/partials/sent_mails/pagination.liquid
new file mode 100644
index 0000000..f58fd1e
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/sent_mails/pagination.liquid
@@ -0,0 +1,64 @@
+{% doc %}
+ @param {string} container_class - CSS class for the pagination container
+ @param {string} button_attrs - HTML attributes for pagination buttons
+ @param {object} collection - paginated collection object
+ @param {string} page_name - name of the page query parameter
+{% enddoc %}
+{% liquid
+ assign container_class = container_class | default: "subtitle flex justify-center md:justify-end items-center mt-8 mx-auto md:mr-0 md:ms-auto"
+ assign button_attrs = button_attrs | default: '' | html_safe
+ assign current_page = collection.current_page | to_positive_integer: 1
+ assign page_name = page_name | default: 'page'
+%}
+
+{% if collection.has_previous_page or collection.has_next_page %}
+
+{% endif %}
diff --git a/pos-module-reports/modules/tests/public/views/partials/sent_mails/show.liquid b/pos-module-reports/modules/tests/public/views/partials/sent_mails/show.liquid
new file mode 100644
index 0000000..eb26c99
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/sent_mails/show.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} mail - sent mail object to display
+{% enddoc %}
+
Back
+
Sent mail
+
Sujbect: {{ mail.options.subject }}
+
To: {{ mail.options.to | join: ',' }}
+
Sent at: {{ mail.created_at | l }}
+
+
+{% print mail.content %}
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/index.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/index.liquid
new file mode 100644
index 0000000..93f4439
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/index.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {object} tests - collection of test objects to display
+{% enddoc %}
+
+
+
+
+ {% for test in tests %}
+
+ {% assign test_name = test.path | split: 'test/' | last %}
+ {{ test.path }}
+ Run
+
+ {% endfor %}
+
+
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/show_html.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/show_html.liquid
new file mode 100644
index 0000000..385222a
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/show_html.liquid
@@ -0,0 +1,30 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
+
+{% assign total = 0 %}
+{% liquid
+ for contract in contracts
+ render 'modules/tests/tests/test_report_html', name: contract.test_path, contract: contract
+ assign total = total | plus: contract.total
+ endfor
+%}
+
+{% if total_errors > 0 %}
+
Total errors: {{ total_errors }}
+ {% response_status 500 %}
+{% endif %}
+
+
+
+
+ {% if total_errors > 0 %}
+ Failure.
+ {% else %}
+ Success.
+ {% endif %}
+Assertions: {{ total }}. Failed: {{ total_errors }}. Time: {{ total_duration }}ms
+
+
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/show_js.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/show_js.liquid
new file mode 100644
index 0000000..a43633a
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/show_js.liquid
@@ -0,0 +1,31 @@
+{% doc %}
+ @param {number} total_errors - total number of errors
+ @param {object} contracts - collection of test contracts
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
+{% liquid
+ assign result = {}
+ assign total_assertions = 0
+
+ assign tests_array = []
+ for contract in tests_array
+ assign total_assertions = total_assertions | plus: contract.total
+
+ assign test_result = { "name": contract.test_path, "success": contract.success, "assertions": contract.total, "errors": contract.errors }
+
+ assign tests_array << test_result
+ endfor
+
+ if total_errors > 0
+ assign result.success = false
+ else
+ assign result.success = true
+ endif
+
+ assign result.total_tests = contracts.size
+ assign result.total_assertions = total_assertions
+ assign result.total_errors = total_errors
+ assign result.duration_ms = total_duration
+ assign result.tests = tests_array
+ %}
+{{ result | json }}
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/show_log.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/show_log.liquid
new file mode 100644
index 0000000..f53c492
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/show_log.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+ @param {string} test_name - name of the test run
+{% enddoc %}
+{% capture result %}
+ {% render 'modules/tests/tests/show_text', contracts: contracts, total_errors: total_errors, total_duration: total_duration, test_name: test_name %}
+{% endcapture %}
+{% liquid
+ assign log_type = test_name | append: ' SUMMARY'
+ log result, type: log_type
+%}
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/show_log_js.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/show_log_js.liquid
new file mode 100644
index 0000000..55b4fd0
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/show_log_js.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+ @param {string} test_name - name of the test run
+{% enddoc %}
+{% capture result %}
+ {% render 'modules/tests/tests/show_js', contracts: contracts, total_errors: total_errors, total_duration: total_duration %}
+{% endcapture %}
+{% assign result = result | html_safe %}
+{% liquid
+ assign log_type = test_name | append: ' SUMMARY'
+ log result, type: log_type
+%}
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/show_text.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/show_text.liquid
new file mode 100644
index 0000000..1068f1f
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/show_text.liquid
@@ -0,0 +1,29 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {string} test_name - name of the test run
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
+Liquid tests
+------------------------
+{% liquid
+ assign total = 0
+ for contract in contracts
+ render 'modules/tests/tests/test_report_text', name: contract.test_path, contract: contract
+ assign total = total | plus: contract.total
+ endfor
+%}
+------------------------
+{% liquid
+ if total_errors > 0
+ assign result = 'Failed'
+ else
+ assign result = 'Success'
+ endif
+%}
+{{ result }}_{{ test_name | strip }}
+{% if total_errors > 0 %}
+ Total errors: {{ total_errors }}
+{% endif %}
+
+Assertions: {{ total }}. Failed: {{ total_errors }}. Time: {{ total_duration }}ms
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/test_report_html.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/test_report_html.liquid
new file mode 100644
index 0000000..d2570a7
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/test_report_html.liquid
@@ -0,0 +1,21 @@
+{% doc %}
+ @param {string} name - test name path
+ @param {object} contract - test contract with results
+{% enddoc %}
+
+
+ {% assign test_name = name | replace: 'test/', '' %}
+ {{ test_name }}
+
+ (run test)
+
+
+
+ {% for e in contract.errors %}
+
+
{{ e[0] }}
+
{{ e[1] | join: ", " | html_safe }}
+
+ {% endfor %}
+
+
diff --git a/pos-module-reports/modules/tests/public/views/partials/tests/test_report_text.liquid b/pos-module-reports/modules/tests/public/views/partials/tests/test_report_text.liquid
new file mode 100644
index 0000000..8527f6e
--- /dev/null
+++ b/pos-module-reports/modules/tests/public/views/partials/tests/test_report_text.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {string} name - test name path
+ @param {object} contract - test contract with results
+{% enddoc %}
+{% assign test_name = name | replace: 'test/', '' %}
+{{ test_name }}
+{% for e in contract.errors %}
+ {{ e[0] }} {{ e[1] | join: ", " }}
+{% endfor %}
diff --git a/pos-module-reports/modules/tests/template-values.json b/pos-module-reports/modules/tests/template-values.json
new file mode 100644
index 0000000..bb3979d
--- /dev/null
+++ b/pos-module-reports/modules/tests/template-values.json
@@ -0,0 +1,7 @@
+{
+ "name": "Pos Module Tests",
+ "machine_name": "tests",
+ "type": "module",
+ "version": "1.3.1",
+ "dependencies": {}
+}
diff --git a/pos-module-reports/modules/user/public/assets/style/pos-user-form.css b/pos-module-reports/modules/user/public/assets/style/pos-user-form.css
new file mode 100644
index 0000000..a7be35b
--- /dev/null
+++ b/pos-module-reports/modules/user/public/assets/style/pos-user-form.css
@@ -0,0 +1,122 @@
+/*
+ styling for the user forms
+
+ layout
+ texts
+ form
+*/
+
+
+
+/* layout
+============================================================================ */
+.pos-user-content {
+ width: 100%;
+ max-width: 350px;
+}
+
+
+
+/* texts
+============================================================================ */
+.pos-user-content .pos-heading-2 {
+ margin-block-end: calc(var(--pos-gap-text-text) / 3);
+}
+
+
+
+/* form
+============================================================================ */
+.pos-user-content .pos-form {
+ margin-block-start: var(--pos-gap-title-content);
+ margin-block-end: var(--pos-gap-content-footer);
+}
+
+.pos-user-content fieldset {
+ display: flex;
+ flex-direction: column;
+ gap: .2em;
+}
+
+.pos-user-label-password {
+ display: flex;
+ justify-content: space-between;
+}
+
+.pos-user-label-password a:not(:hover):not(:active) {
+ color: var(--pos-color-content-foreground-supplementary);
+}
+
+.pos-form-simple fieldset:has(.pos-user-label-password) {
+ display: flex;
+ flex-direction: column;
+ gap: .2em;
+}
+
+.pos-user-social-login-separator {
+ margin: 20px 0px;
+ text-align: center;
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: center;
+ gap: 8px;
+ text-transform: uppercase;
+}
+
+.pos-user-social-login-separator::before,
+.pos-user-social-login-separator::after {
+ content: "";
+ display: inline-block;
+ border-top: 1px solid var(--pos-color-content-foreground-supplementary);
+ flex-grow: 1;
+}
+
+.pos-user-content .pos-user-social-login-providers form {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.pos-user-content .pos-user-social-login-providers .pos-button {
+ width: 100%;
+}
+
+.pos-button-social {
+ display: flex;
+ place-items: center;
+}
+
+.pos-button-social {
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.pos-button-social-icon {
+ width: 30%;
+ display: flex;
+ place-content: center;
+ place-items: center;
+}
+
+.pos-button-social-text {
+ width: 70%;
+}
+
+.pos-social-listing {
+ margin: 10px 0;
+ display: flex;
+ flex-direction: column;
+ max-width: 350px;
+ gap: 10px;
+}
+
+.pos-2fa-input {
+ width: 50px;
+}
+
+.pos-2fa-spacing {
+ padding-top: var(--pos-gap-title-content);
+}
+
+.pos-user-2fa .submit-2fa {
+ margin-top: 5px;
+}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/graphql/api_call.graphql b/pos-module-reports/modules/user/public/graphql/api_call.graphql
new file mode 100644
index 0000000..2aab5d7
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/api_call.graphql
@@ -0,0 +1,19 @@
+mutation api_call(
+ $api_template: String!
+ $data: HashObject!
+ $timeout: Int = 60
+) {
+ api_call_send(
+ data: $data
+ template: { name: $api_template }
+ options: { timeout: $timeout }
+ ) {
+ response {
+ status
+ body
+ }
+ errors {
+ message
+ }
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/oauth/create.graphql b/pos-module-reports/modules/user/public/graphql/oauth/create.graphql
new file mode 100644
index 0000000..26fc424
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/oauth/create.graphql
@@ -0,0 +1,21 @@
+mutation ($user_id: String!, $provider: String!, $sub: String!) {
+ record: record_create(
+ record: {
+ table: "modules/user/oauth"
+ properties: [
+ { name: "user_id", value: $user_id }
+ { name: "provider", value: $provider }
+ { name: "sub", value: $sub }
+ ]
+ }
+ ) {
+ id
+ create_at: created_at
+ updated_at: updated_at
+ table
+
+ user_id: property(name: "user_id")
+ provider: property(name: "provider")
+ sub: property(name: "sub")
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/oauth/delete.graphql b/pos-module-reports/modules/user/public/graphql/oauth/delete.graphql
new file mode 100644
index 0000000..8fea3d6
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/oauth/delete.graphql
@@ -0,0 +1,6 @@
+mutation delete($id: ID!) {
+ record: record_delete(
+ table: "modules/user/oauth"
+ id: $id
+ ){ id }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/oauth/find_by_sub.graphql b/pos-module-reports/modules/user/public/graphql/oauth/find_by_sub.graphql
new file mode 100644
index 0000000..86c78ca
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/oauth/find_by_sub.graphql
@@ -0,0 +1,30 @@
+query find_by_sub(
+ $sub: String!
+ $provider: String!
+) {
+ records(
+ per_page: 1
+ filter: {
+ table: { value: "modules/user/oauth" }
+ properties: [
+ { name: "sub", value: $sub }
+ { name: "provider", value: $provider }
+ ]
+ }
+ ) {
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at: created_at
+ updated_at: updated_at
+ table
+
+ user_id: property(name: "user_id")
+ sub: property(name: "sub")
+ provider: property(name: "provider")
+ }
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/oauth/find_by_user_id.graphql b/pos-module-reports/modules/user/public/graphql/oauth/find_by_user_id.graphql
new file mode 100644
index 0000000..9ffa0d2
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/oauth/find_by_user_id.graphql
@@ -0,0 +1,29 @@
+query find_by_user_id(
+ $user_id: String!
+ $provider: String = null
+) {
+ records(
+ per_page: 1
+ filter: {
+ table: { value: "modules/user/oauth" }
+ properties: [
+ { name: "user_id", value: $user_id }
+ { name: "provider", value: $provider }
+ ]
+ }
+ ) {
+ total_entries
+ total_pages
+ has_previous_page
+ has_next_page
+ results {
+ id
+ created_at: created_at
+ updated_at: updated_at
+ table
+
+ user_id: property(name: "user_id")
+ provider: property(name: "provider")
+ }
+ }
+}
diff --git a/pos-module-reports/modules/profile/public/graphql/profiles/create.graphql b/pos-module-reports/modules/user/public/graphql/profiles/create.graphql
similarity index 52%
rename from pos-module-reports/modules/profile/public/graphql/profiles/create.graphql
rename to pos-module-reports/modules/user/public/graphql/profiles/create.graphql
index 2493d98..a3e1d5f 100644
--- a/pos-module-reports/modules/profile/public/graphql/profiles/create.graphql
+++ b/pos-module-reports/modules/user/public/graphql/profiles/create.graphql
@@ -1,15 +1,16 @@
mutation (
$uuid: String!
- $user_id: String!,
- $first_name: String,
+ $user_id: String!
+ $first_name: String
$last_name: String
$name: String
$email: String
+ $roles: [String]
$c__names: String
) {
record: record_create(
record: {
- table: "modules/profile/profile"
+ table: "modules/user/profile"
properties: [
{ name: "user_id", value: $user_id }
{ name: "first_name", value: $first_name }
@@ -17,6 +18,7 @@ mutation (
{ name: "uuid", value: $uuid }
{ name: "name", value: $name }
{ name: "email", value: $email }
+ { name: "roles", value_array: $roles }
{ name: "c__names", value: $c__names }
]
}
@@ -24,6 +26,14 @@ mutation (
id
created_at
type: table
- properties
+
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ otp_configured: property_boolean(name: "otp_configured")
}
}
diff --git a/pos-module-reports/modules/profile/public/graphql/profiles/delete.graphql b/pos-module-reports/modules/user/public/graphql/profiles/delete.graphql
similarity index 69%
rename from pos-module-reports/modules/profile/public/graphql/profiles/delete.graphql
rename to pos-module-reports/modules/user/public/graphql/profiles/delete.graphql
index 2f858b5..8ceda25 100644
--- a/pos-module-reports/modules/profile/public/graphql/profiles/delete.graphql
+++ b/pos-module-reports/modules/user/public/graphql/profiles/delete.graphql
@@ -1,6 +1,6 @@
mutation delete_profile($id: ID!) {
record: record_delete(
- table: "modules/profile/profile"
+ table: "modules/user/profile"
id: $id
){ id }
}
diff --git a/pos-module-reports/modules/user/public/graphql/profiles/mark_otp.graphql b/pos-module-reports/modules/user/public/graphql/profiles/mark_otp.graphql
new file mode 100644
index 0000000..5d023c1
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/profiles/mark_otp.graphql
@@ -0,0 +1,17 @@
+mutation mark_otp(
+ $id: ID!
+ $otp_configured: Boolean!
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "modules/user/profile"
+ properties: [
+ { name: "otp_configured", value_boolean: $otp_configured }
+ ]
+ }
+ ) {
+ id
+ otp_configured: property_boolean(name: "otp_configured")
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/profiles/roles/append.graphql b/pos-module-reports/modules/user/public/graphql/profiles/roles/append.graphql
new file mode 100644
index 0000000..27d801f
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/profiles/roles/append.graphql
@@ -0,0 +1,26 @@
+mutation (
+ $id: ID!
+ $role: String!
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "modules/user/profile"
+ properties: [
+ { name: "roles", array_append: $role }
+ ]
+ }
+ ) {
+ id
+ created_at
+ type: table
+
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/profiles/roles/remove.graphql b/pos-module-reports/modules/user/public/graphql/profiles/roles/remove.graphql
new file mode 100644
index 0000000..37bda28
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/profiles/roles/remove.graphql
@@ -0,0 +1,26 @@
+mutation (
+ $id: ID!
+ $role: String!
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "modules/user/profile"
+ properties: [
+ { name: "roles", array_remove: $role }
+ ]
+ }
+ ) {
+ id
+ created_at
+ type: table
+
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/profiles/roles/set.graphql b/pos-module-reports/modules/user/public/graphql/profiles/roles/set.graphql
new file mode 100644
index 0000000..0f341ee
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/profiles/roles/set.graphql
@@ -0,0 +1,26 @@
+mutation (
+ $id: ID!
+ $roles: [String!]
+) {
+ record: record_update(
+ id: $id
+ record: {
+ table: "modules/user/profile"
+ properties: [
+ { name: "roles", value_array: $roles }
+ ]
+ }
+ ) {
+ id
+ created_at
+ type: table
+
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ }
+}
diff --git a/pos-module-reports/modules/profile/public/graphql/profiles/search.graphql b/pos-module-reports/modules/user/public/graphql/profiles/search.graphql
similarity index 69%
rename from pos-module-reports/modules/profile/public/graphql/profiles/search.graphql
rename to pos-module-reports/modules/user/public/graphql/profiles/search.graphql
index 288a4f0..6dccfc8 100644
--- a/pos-module-reports/modules/profile/public/graphql/profiles/search.graphql
+++ b/pos-module-reports/modules/user/public/graphql/profiles/search.graphql
@@ -18,7 +18,7 @@ query (
per_page: $limit
filter: {
id: { value: $id, value_in: $ids, not_value_in: $not_ids }
- table: { value: "modules/profile/profile" }
+ table: { value: "modules/user/profile" }
properties: [
{ name: "uuid", value: $uuid }
{ name: "first_name", value: $first_name }
@@ -39,7 +39,14 @@ query (
created_at
type: table
- properties
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ otp_configured: property_boolean(name: "otp_configured")
}
}
}
diff --git a/pos-module-reports/modules/profile/public/graphql/profiles/update.graphql b/pos-module-reports/modules/user/public/graphql/profiles/update.graphql
similarity index 53%
rename from pos-module-reports/modules/profile/public/graphql/profiles/update.graphql
rename to pos-module-reports/modules/user/public/graphql/profiles/update.graphql
index a2bbdc7..b47b790 100644
--- a/pos-module-reports/modules/profile/public/graphql/profiles/update.graphql
+++ b/pos-module-reports/modules/user/public/graphql/profiles/update.graphql
@@ -4,17 +4,19 @@ mutation profiles_update(
$first_name: String
$last_name: String
$email: String
+ $roles: [String]
$c__names: String
) {
record: record_update(
id: $id
record: {
- table: "modules/profile/profile"
+ table: "modules/user/profile"
properties: [
{ name: "name", value: $name }
{ name: "first_name", value: $first_name }
{ name: "last_name", value: $last_name }
{ name: "email", value: $email }
+ { name: "roles", value_array: $roles }
{ name: "c__names", value: $c__names }
]
}
@@ -23,6 +25,13 @@ mutation profiles_update(
created_at
type: table
- properties
+ email: property(name: "email")
+ first_name: property(name: "first_name")
+ last_name: property(name: "last_name")
+ name: property(name: "name")
+ user_id: property(name: "user_id")
+ uuid: property(name: "uuid")
+ roles: property_array(name: "roles")
+ otp_configured: property_boolean(name: "otp_configured")
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/create.graphql b/pos-module-reports/modules/user/public/graphql/user/create.graphql
index c5a66a1..8acc3ee 100644
--- a/pos-module-reports/modules/user/public/graphql/user/create.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/create.graphql
@@ -1,7 +1,6 @@
-mutation ($email: String!, $password: String!, $roles: [String] = []) {
- user: user_create(user: { email: $email, password: $password, properties: [{ name: "roles", value_array: $roles }]}) {
+mutation ($email: String!, $password: String!) {
+ user: user_create(user: { email: $email, password: $password, properties: []}) {
id
email
- roles: property_array(name: "roles")
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/email_update.graphql b/pos-module-reports/modules/user/public/graphql/user/email_update.graphql
new file mode 100644
index 0000000..600a568
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/user/email_update.graphql
@@ -0,0 +1,10 @@
+mutation update_email($id: ID!, $email: String!) {
+ user: user_update(
+ id: $id
+ user: {
+ email: $email
+ }
+ ){
+ id
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/user/emails_count.graphql b/pos-module-reports/modules/user/public/graphql/user/emails_count.graphql
new file mode 100644
index 0000000..e1659a1
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/user/emails_count.graphql
@@ -0,0 +1,5 @@
+query emails_count($email: String!){
+ users(filter: { email: { value: $email} }, per_page:1){
+ total_entries
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/user/find.graphql b/pos-module-reports/modules/user/public/graphql/user/find.graphql
index 908deb3..9887224 100644
--- a/pos-module-reports/modules/user/public/graphql/user/find.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/find.graphql
@@ -17,7 +17,6 @@ query (
created_at
email
id
- roles: property_array(name: "roles")
token: temporary_token(valid_for: $valid_for, expires_in: $expires_in) @include(if: $with_token)
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/list.graphql b/pos-module-reports/modules/user/public/graphql/user/list.graphql
index 35a4b57..79c111e 100644
--- a/pos-module-reports/modules/user/public/graphql/user/list.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/list.graphql
@@ -5,7 +5,6 @@ query users_list($email:String) {
created_at
email
id
- roles: property_array(name: "roles")
}
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/load.graphql b/pos-module-reports/modules/user/public/graphql/user/load.graphql
index 97cf765..8cd98ef 100644
--- a/pos-module-reports/modules/user/public/graphql/user/load.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/load.graphql
@@ -3,7 +3,7 @@ query ($id: ID!) {
results {
created_at
email
- id
+ id,
roles: property_array(name: "roles")
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/otp.graphql b/pos-module-reports/modules/user/public/graphql/user/otp.graphql
new file mode 100644
index 0000000..d598ca7
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/user/otp.graphql
@@ -0,0 +1,15 @@
+query otp($email: String!, $issuer: String!){
+ users(
+ filter: { email: { value: $email} }, per_page:1
+ ){
+ results{
+ id
+ email
+ otp {
+ current_code
+ secret_as_svg_qr_code(label: $email, issuer: $issuer)
+ secret
+ }
+ }
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/user/roles/append.graphql b/pos-module-reports/modules/user/public/graphql/user/roles/append.graphql
deleted file mode 100644
index c8f91b6..0000000
--- a/pos-module-reports/modules/user/public/graphql/user/roles/append.graphql
+++ /dev/null
@@ -1,13 +0,0 @@
-mutation user_roles_append($id: ID!, $role: String!) {
- user: user_update(
- id: $id
- user: {
- properties: [
- { name: "roles", array_append: $role }
- ]
- }
- ) {
- id
- roles: property_array(name: "roles")
- }
-}
diff --git a/pos-module-reports/modules/user/public/graphql/user/roles/remove.graphql b/pos-module-reports/modules/user/public/graphql/user/roles/remove.graphql
deleted file mode 100644
index ab4a9a5..0000000
--- a/pos-module-reports/modules/user/public/graphql/user/roles/remove.graphql
+++ /dev/null
@@ -1,13 +0,0 @@
-mutation user_roles_remove($id: ID!, $role: String!) {
- user: user_update(
- id: $id
- user: {
- properties: [
- { name: "roles", array_remove: $role }
- ]
- }
- ) {
- id
- roles: property_array(name: "roles")
- }
-}
diff --git a/pos-module-reports/modules/user/public/graphql/user/roles/set.graphql b/pos-module-reports/modules/user/public/graphql/user/roles/set.graphql
deleted file mode 100644
index 81d8a1e..0000000
--- a/pos-module-reports/modules/user/public/graphql/user/roles/set.graphql
+++ /dev/null
@@ -1,7 +0,0 @@
-mutation ($id: ID!, $roles: [String]!) {
- user: user_update(id: $id, user: { properties: [{ name: "roles", value_array: $roles }] }) {
- id
- email
- roles: property_array(name: "roles")
- }
-}
diff --git a/pos-module-reports/modules/user/public/graphql/user/search.graphql b/pos-module-reports/modules/user/public/graphql/user/search.graphql
index 19b543b..55bc396 100644
--- a/pos-module-reports/modules/user/public/graphql/user/search.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/search.graphql
@@ -5,8 +5,7 @@ query (
$limit: Int = 20
$page: Int = 1
$sort: UsersSortInput = { id: { order: DESC } }
- $role: String
- $roles: [String!]
+ $include_profiles: Boolean = false
) {
users(
per_page: $limit
@@ -14,17 +13,23 @@ query (
filter: {
id: { value: $id, not_value_in: $not_ids }
email: { value: $email }
- properties: [{
- name: "role", value: $role, value_in: $roles
- }]
}
sort: [$sort]
) {
results {
id
email
- roles: property_array(name: "roles")
created_at
+ roles: property_array(name: "roles")
+ profiles: related_records(
+ table: "modules/user/profile"
+ join_on_property: "id"
+ foreign_property: "user_id"
+ limit: 1
+ ) @include(if: $include_profiles) {
+ id
+ properties
+ }
}
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/update.graphql b/pos-module-reports/modules/user/public/graphql/user/update.graphql
index 3c59dbe..00ea415 100644
--- a/pos-module-reports/modules/user/public/graphql/user/update.graphql
+++ b/pos-module-reports/modules/user/public/graphql/user/update.graphql
@@ -1,7 +1,6 @@
-mutation ($id: ID!, $email: String, $password: String, $roles: [String]) {
- user: user_update(id: $id, user: { email: $email, password: $password, properties: [{ name: "roles", value_array: $roles }] }) {
+mutation ($id: ID!, $email: String, $password: String) {
+ user: user_update(id: $id, user: { email: $email, password: $password, properties: [] }) {
id
email
- roles: property_array(name: "roles")
}
}
diff --git a/pos-module-reports/modules/user/public/graphql/user/verify_otp.graphql b/pos-module-reports/modules/user/public/graphql/user/verify_otp.graphql
new file mode 100644
index 0000000..556d415
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/user/verify_otp.graphql
@@ -0,0 +1,14 @@
+query verify($email: String!, $otp_code: String!, $password: String!){
+ users(
+ filter: { email: { value: $email} }, per_page:1
+ ){
+ results{
+ id
+ email
+ authenticate{
+ otp_code(code: $otp_code, drift: 30)
+ password(password: $password)
+ }
+ }
+ }
+}
diff --git a/pos-module-reports/modules/user/public/graphql/user/verify_password_for_user_id.graphql b/pos-module-reports/modules/user/public/graphql/user/verify_password_for_user_id.graphql
new file mode 100644
index 0000000..98b78f0
--- /dev/null
+++ b/pos-module-reports/modules/user/public/graphql/user/verify_password_for_user_id.graphql
@@ -0,0 +1,16 @@
+query verify($id: ID!, $password: String!){
+ users(
+ filter: {
+ id: { value: $id }
+ }
+ per_page: 1
+ ){
+ results{
+ id
+ email
+ authenticate{
+ password(password: $password)
+ }
+ }
+ }
+}
diff --git a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create.liquid b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create.liquid
index 3babc6a..da08617 100644
--- a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create.liquid
@@ -1,10 +1,16 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {string} host - The host URL
+ @param {number} valid_for - Token validity duration in minutes
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/authentication_links/create/build', email: email, host: host, valid_for: valid_for
function object = 'modules/user/commands/authentication_links/create/check', object: object, hcaptcha_params: hcaptcha_params
if object.valid
function object = 'modules/user/commands/authentication_links/create/execute', object: object
- assign event_payload = null | hash_merge: email: email
+ assign event_payload = {"email": email}
function _ = 'modules/core/commands/events/publish', type: 'authentication_link_created', object: event_payload, delay: null, max_attempts: null
endif
diff --git a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/build.liquid b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/build.liquid
index 435aaa7..eb4ad01 100644
--- a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/build.liquid
@@ -1,6 +1,11 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} host - The host URL
+ @param {number} valid_for - Token validity duration in minutes
+{% enddoc %}
{% liquid
assign valid_for = valid_for | default: 5
- function user = 'modules/user/queries/user/find', email: email, with_token: true
+ function user = 'modules/user/queries/user/find', email: email, with_token: true, id: null
%}
{% parse_json object %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/check.liquid
index cdd52a2..7d49cd5 100644
--- a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/check.liquid
@@ -1,16 +1,20 @@
+{% doc %}
+ @param {object} hcaptcha_params - The hCaptcha verification parameters
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'host'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'token'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'host', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'token', key: null
if context.constants.VERIFY_HCAPTCHA == "true"
- function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: hcaptcha_params
+ function c = 'modules/core/validations/hcaptcha', c: c, hcaptcha_params: hcaptcha_params, key: null
endif
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/execute.liquid b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/execute.liquid
index 2b5ea1e..e22ed51 100644
--- a/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/execute.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/authentication_links/create/execute.liquid
@@ -1,7 +1,10 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
if object.valid
- hash_assign object['url'] = 'https://{host}/passwords/new?token={token}&email={email}' | expand_url_template: object
+ assign object.url = 'https://{host}/passwords/new?token={token}&email={email}' | expand_url_template: object
endif
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/oauth/create_user.liquid b/pos-module-reports/modules/user/public/lib/commands/oauth/create_user.liquid
new file mode 100644
index 0000000..463fad1
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/oauth/create_user.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {string} user_email - The user email address
+ @param {string} user_first_name - The user first name
+ @param {string} user_last_name - The user last name
+{% enddoc %}
+{% liquid
+ assign password = 30 | random_string
+ assign full_name = user_first_name | append: " " | append: user_last_name
+ assign object = {"email": user_email, "firstName": user_first_name, "lastName": user_last_name, "fullName": full_name}
+
+ function new_user = "modules/user/commands/user/create", first_name: user_first_name, last_name: user_last_name, email: user_email, password: password, hook_params: object, roles: null
+ return new_user
+%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/lib/commands/passwords/create.liquid b/pos-module-reports/modules/user/public/lib/commands/passwords/create.liquid
index fb11f56..8d9eec1 100644
--- a/pos-module-reports/modules/user/public/lib/commands/passwords/create.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/passwords/create.liquid
@@ -1,10 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/passwords/create/build', object: object
function object = 'modules/user/commands/passwords/create/check', object: object
if object.valid
function object = 'modules/user/commands/passwords/create/execute', object: object
- assign event_payload = null | hash_merge: user_id: object.user_id
+ assign event_payload = {"user_id": object.user_id}
function _ = 'modules/core/commands/events/publish', type: 'password_created', object: event_payload, delay: null, max_attempts: null
endif
diff --git a/pos-module-reports/modules/user/public/lib/commands/passwords/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/passwords/create/check.liquid
index 877fbe9..48e8611 100644
--- a/pos-module-reports/modules/user/public/lib/commands/passwords/create/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/passwords/create/check.liquid
@@ -1,14 +1,17 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password_confirmation'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password_confirmation', key: null
function c = 'modules/core/validations/equal', c: c, given: object.password, expected: object.password_confirmation, field_name: 'password_confirmation', key: 'modules/user/validation.password.do_not_match', not_verbose: true, message: null
- function c = 'modules/core/validations/password_complexity', c: c, object: object, field_name: 'password', key: null
+ function c = 'modules/core/validations/password_complexity', c: c, object: object, field_name: 'password', maximum: null, minimum: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/passwords/create/execute.liquid b/pos-module-reports/modules/user/public/lib/commands/passwords/create/execute.liquid
index 4c0a7fd..48eda9f 100644
--- a/pos-module-reports/modules/user/public/lib/commands/passwords/create/execute.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/passwords/create/execute.liquid
@@ -1,12 +1,15 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
graphql r = 'modules/user/user/update_password', args: object
if r.errors
log r.errors, type: 'errors.graphql.invalid'
- hash_assign object['valid'] = false
- hash_assign object['errors'] = r.errors
+ assign object.valid = false
+ assign object.errors = r.errors
endif
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/create.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create.liquid
new file mode 100644
index 0000000..74fdd55
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/profiles/create/build', object: object
+ function object = 'modules/user/commands/profiles/create/check', object: object
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/user/profiles/create', object: object, selection: null
+ assign object = object | hash_merge: object.properties
+ endif
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/create/build.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create/build.liquid
new file mode 100644
index 0000000..be89d73
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create/build.liquid
@@ -0,0 +1,34 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function tokenized_names = 'modules/user/commands/profiles/tokenize_names', object: object
+ assign uuid_new = '' | uuid
+ assign uuid = object.uuid | default: uuid_new
+ assign name = object.first_name | append: ' ' | append: object.last_name
+
+ assign data = {"first_name": object.first_name, "last_name": object.last_name, "user_id": object.user_id, "email": object.email, "uuid": uuid, "name": name, "c__names": tokenized_names}
+ if object.roles == null
+ assign roles = []
+ if context.constants.USER_DEFAULT_ROLE != blank
+ assign roles << context.constants.USER_DEFAULT_ROLE
+ endif
+ else
+ assign roles_type = object.roles | type_of
+ if roles_type == 'String'
+ assign roles = object.roles | split: ','
+ elsif roles_type == 'Array'
+ assign roles = object.roles
+ else
+ log object.roles, type: 'ERROR: roles must be an array or a coma separated string'
+ assign roles = []
+
+ if context.constants.USER_DEFAULT_ROLE != blank
+ assign roles << context.constants.USER_DEFAULT_ROLE
+ endif
+ endif
+ endif
+
+ assign data.roles = roles
+ return data
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create/check.liquid
new file mode 100644
index 0000000..7089403
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create/check.liquid
@@ -0,0 +1,19 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'user_id', key: null
+ function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'user_id', table: 'modules/user/profile', scope_name: null, exclude_name: null, key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'uuid', key: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'name', maximum: 80, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'first_name', maximum: 40, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'last_name', maximum: 40, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_proxy.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create_proxy.liquid
similarity index 62%
rename from pos-module-reports/modules/profile/public/lib/commands/profiles/create_proxy.liquid
rename to pos-module-reports/modules/user/public/lib/commands/profiles/create_proxy.liquid
index 5f4de9a..be2d4f2 100644
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_proxy.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create_proxy.liquid
@@ -1,5 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
assign function_name = profile_module | append: '/commands/profiles/create'
function profile = function_name, object: object
return profile
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/create_validate.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create_validate.liquid
new file mode 100644
index 0000000..5862233
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create_validate.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/profiles/create/build', object: object
+ function object = 'modules/user/commands/profiles/create/check', object: object
+
+ return object
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate_proxy.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/create_validate_proxy.liquid
similarity index 63%
rename from pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate_proxy.liquid
rename to pos-module-reports/modules/user/public/lib/commands/profiles/create_validate_proxy.liquid
index 967d7cf..c2a60cd 100644
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/create_validate_proxy.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/create_validate_proxy.liquid
@@ -1,5 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
assign function_name = profile_module | append: '/commands/profiles/create_validate'
function profile = function_name, object: object
return profile
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/delete.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/delete.liquid
new file mode 100644
index 0000000..9a1554f
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/delete.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/profiles/delete/build', object: object
+ function object = 'modules/user/commands/profiles/delete/check', object: object
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/user/profiles/delete', object: object, selection: null
+ endif
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/delete/build.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/delete/build.liquid
new file mode 100644
index 0000000..dbbbe71
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/delete/build.liquid
@@ -0,0 +1,8 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign data = {"id": object.id}
+
+ return data
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/delete/check.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/delete/check.liquid
new file mode 100644
index 0000000..ba60f2a
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/delete/check.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+
+ assign object.valid = c.valid
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp.liquid
new file mode 100644
index 0000000..c683119
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/profiles/mark_otp/build', object: object
+ function object = 'modules/user/commands/profiles/mark_otp/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/user/profiles/mark_otp' object: object, selection: null
+ endif
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/build.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/build.liquid
new file mode 100644
index 0000000..e5f9753
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/build.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign data = { "id": object.id }
+ if object.otp_configured == null
+ assign data.otp_configured = true
+ else
+ assign data.otp_configured = object.otp_configured
+ endif
+
+ return data
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/check.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/check.liquid
new file mode 100644
index 0000000..d01c0f8
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/mark_otp/check.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+ function c = 'modules/core/validations/not_null', c: c, object: object, field_name: 'otp_configured', key: null
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/roles/append.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/append.liquid
new file mode 100644
index 0000000..e8c2a83
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/append.liquid
@@ -0,0 +1,15 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} role - The role name
+{% enddoc %}
+{% liquid
+ assign object = { "valid": true, "id": id, "role": role }
+ function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/profiles/roles/append', selection: null
+
+ if object.errors == blank
+ assign event_payload = {"profile_id": id, "role": role}
+ function _ = 'modules/core/commands/events/publish', type: 'user_role_appended', object: event_payload, delay: null, max_attempts: null
+ endif
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/roles/remove.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/remove.liquid
new file mode 100644
index 0000000..47c9322
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/remove.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} role - The role name
+{% enddoc %}
+{% liquid
+ assign object = { "valid": true, "id": id, "role": role }
+ function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/profiles/roles/remove', selection: null
+
+ if object.errors == blank
+ assign event_payload = {"profile_id": id, "role": role}
+ function _ = 'modules/core/commands/events/publish', type: 'user_role_removed', object: event_payload, delay: null, max_attempts: null
+ endif
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/roles/set.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/set.liquid
new file mode 100644
index 0000000..d9e35e5
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/roles/set.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} id - The record ID
+ @param {string} roles - The roles to assign
+{% enddoc %}
+{% liquid
+ assign object = { "valid": true, "id": id, "roles": roles }
+ function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/profiles/roles/set', selection: null
+
+ if object.errors == blank
+ assign event_payload = {"profile_id": id, "roles": roles}
+ function _ = 'modules/core/commands/events/publish', type: 'user_roles_set', object: event_payload, delay: null, max_attempts: null
+ endif
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/tokenize_names.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/tokenize_names.liquid
new file mode 100644
index 0000000..0998c4a
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/tokenize_names.liquid
@@ -0,0 +1,7 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign tokenized_names = [] | push: object.email | push: object.first_name | push: object.last_name | compact | uniq | join: ' ' | downcase
+ return tokenized_names
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/update.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/update.liquid
new file mode 100644
index 0000000..e09eaae
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/update.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {object} profile - The profile object
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/profiles/update/build', object: object, profile: profile
+ function object = 'modules/user/commands/profiles/update/check', object: object
+
+ if object.valid
+ function object = 'modules/core/commands/execute', mutation_name: 'modules/user/profiles/update', object: object, selection: null
+ assign object = object | hash_merge: object.properties
+ endif
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/update/build.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/update/build.liquid
new file mode 100644
index 0000000..12a7102
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/update/build.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {object} profile - The profile object
+{% enddoc %}
+{% liquid
+ function tokenized_names = 'modules/user/commands/profiles/tokenize_names', object: object
+ assign name = object.first_name | append: ' ' | append: object.last_name
+ assign data = {"id": profile.id, "first_name": object.first_name, "last_name": object.last_name, "name": name, "c__names": tokenized_names, "email": profile.email}
+
+ return data
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/profiles/update/check.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/update/check.liquid
new file mode 100644
index 0000000..c846f1e
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/update/check.liquid
@@ -0,0 +1,20 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+ function c = 'modules/core/validations/uniqueness', c: c, object: object, field_name: 'email', table: 'modules/user/profile', scope_name: null, exclude_name: null, key: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'name', maximum: 80, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'first_name', maximum: 40, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'last_name', maximum: 40, allow_blank: null, is: null, message_is: null, message_maximum: null, message_minimum: null, minimum: null, value: null
+
+
+ assign object.valid = c.valid
+
+
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/commands/profiles/update_proxy.liquid b/pos-module-reports/modules/user/public/lib/commands/profiles/update_proxy.liquid
similarity index 57%
rename from pos-module-reports/modules/profile/public/lib/commands/profiles/update_proxy.liquid
rename to pos-module-reports/modules/user/public/lib/commands/profiles/update_proxy.liquid
index fbf2853..173e584 100644
--- a/pos-module-reports/modules/profile/public/lib/commands/profiles/update_proxy.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/profiles/update_proxy.liquid
@@ -1,5 +1,9 @@
+{% doc %}
+ @param {object} object - The object to process
+ @param {object} profile - The profile object
+{% enddoc %}
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
assign function_name = profile_module | append: '/commands/profiles/update'
function profile = function_name, object: object, profile: profile
return profile
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/create.liquid b/pos-module-reports/modules/user/public/lib/commands/session/create.liquid
index 5cffc62..1d9feed 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/create.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/create.liquid
@@ -1,21 +1,20 @@
-{% comment %}
- Creates a user sessions.
- Params:
- - user_id string (optional)
- - validate_password boolean
- default: true
- - email: string (optional)
- the user's email address
- - password: string (optional)
- the user's password
- - hook_params: object
- the other params that will be passed to hook_user_login
-{% endcomment %}
+{% doc %}
+ @param {string} email - The email address
+ @param {object} hook_params - Additional parameters to pass to hooks
+ @param {string} password - The password
+ @param {boolean} skip_otp - Whether to skip OTP verification
+ @param {string} user_id - The user ID (used when validate_password is false)
+ @param {boolean} validate_password - Whether to validate the password
+{% enddoc %}
{% liquid
if validate_password == nil
assign validate_password = true
endif
+ if skip_otp == nil
+ assign skip_otp = false
+ endif
+
if validate_password
function user = 'modules/user/commands/user/verify_password', email: email, password: password
unless user.valid
@@ -28,16 +27,21 @@
function object = 'modules/user/commands/session/create/check', object: object
if object.valid
function user = 'modules/user/queries/user/load', id: object.id
- if user.id
- sign_in user_id: user.id
- assign params = '{}' | parse_json | hash_merge: user: user, hook_params: hook_params
- function results = 'modules/core/commands/hook/fire', hook: 'user_login', params: params, merge_to_object: true
- hash_assign user['hook_results'] = results
- endif
- hash_assign object['user'] = user
+ function profile = 'modules/user/queries/profiles/find', user_id: user.id, id: null, uuid: null, first_name: null, last_name: null
+ if profile.otp_configured and skip_otp == false
+ assign object.otp_required = true
+ else
+ if user.id
+ sign_in user_id: user.id
+ assign params = { "user": user, "hook_params": hook_params }
+ function results = 'modules/core/commands/hook/fire', hook: 'user_login', params: params, merge_to_object: true
+ assign user.hook_results = results
+ endif
+ assign object.user = user
- assign event_payload = null | hash_merge: user_id: object.id
- function _ = 'modules/core/commands/events/publish', type: 'user_signed_in', object: event_payload, delay: null, max_attempts: null
+ assign event_payload = {"user_id": object.id}
+ function _ = 'modules/core/commands/events/publish', type: 'user_signed_in', object: event_payload, delay: null, max_attempts: null
+ endif
endif
return object
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/create/build.liquid b/pos-module-reports/modules/user/public/lib/commands/session/create/build.liquid
index 3cefb8b..2666900 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/create/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/create/build.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% parse_json object %}
{
"id": {{ id | json }}
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/session/create/check.liquid
index a8e6310..bcda570 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/create/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/create/check.liquid
@@ -1,10 +1,13 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/destroy.liquid b/pos-module-reports/modules/user/public/lib/commands/session/destroy.liquid
index 1362414..55fdfbd 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/destroy.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/destroy.liquid
@@ -2,19 +2,19 @@
Destroys the current user's session.
{% endcomment %}
{% liquid
- function user = 'modules/user/queries/user/current'
+ function current_profile = 'modules/user/helpers/current_profile'
+
graphql destroy = 'modules/user/session/destroy'
- hash_assign destroy['user'] = user
+ assign destroy.user = current_profile.user
unless destroy.errors
- assign params = '{}' | parse_json | hash_merge: destroy: destroy
+ assign params = { "destroy": destroy }
function results = 'modules/core/commands/hook/fire', hook: 'user_logout', params: params, merge_to_object: null
- hash_assign destroy['hook_results'] = results
- assign event_payload = null | hash_merge: user_id: user.id
+ assign destroy.hook_results = results
+ assign event_payload = {"user_id": current_profile.user.id}
function _ = 'modules/core/commands/events/publish', type: 'user_logout', object: event_payload, delay: null, max_attempts: null
session original_user_id = null
session return_to = null
endunless
-
return destroy
%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create.liquid b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create.liquid
index 55e3b14..ccd43c8 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} current_user_id - The current user ID
+ @param {object} user - The user object
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/session/impersonation/create/build', user: user, current_user_id: current_user_id
function object = 'modules/user/commands/session/impersonation/create/check', object: object
@@ -5,7 +9,7 @@
sign_in user_id: object.id
session original_user_id = object.current_user_id
- assign event_object = null | hash_merge: actor_id: object.current_user_id, target_id: object.user_id
+ assign event_object = {"actor_id": object.current_user_id, "target_id": object.user_id}
function _ = 'modules/core/commands/events/publish', type: 'impersonation_started', object: event_object, delay: null, max_attempts: null
endif
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/build.liquid b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/build.liquid
index a549d34..fb8ecaf 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/build.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} current_user_id - The current user ID
+ @param {object} user - The user object
+{% enddoc %}
{% parse_json object %}
{
"id": {{ user.id | json }},
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/check.liquid
index 3298544..527fb45 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/create/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'current_user_id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'current_user_id', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy.liquid b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy.liquid
index d50546a..5f68cd0 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} current_user_id - The current user ID
+ @param {object} user - The user object
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/session/impersonation/create/build', user: user, current_user_id: current_user_id
function object = 'modules/user/commands/session/impersonation/destroy/check', object: object
@@ -6,7 +10,7 @@
sign_in user_id: object.id
session original_user_id = null
- assign event_object = null | hash_merge: actor_id: object.id , impersonated_user_id: object.current_user_id
+ assign event_object = {"actor_id": object.id, "impersonated_user_id": object.current_user_id}
function _ = 'modules/core/commands/events/publish', type: 'impersonation_ended', object: event_object, delay: null, max_attempts: null
endif
diff --git a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy/check.liquid b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy/check.liquid
index 3298544..527fb45 100644
--- a/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/session/impersonation/destroy/check.liquid
@@ -1,11 +1,14 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'current_user_id'
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'current_user_id', key: null
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/create.liquid b/pos-module-reports/modules/user/public/lib/commands/user/create.liquid
index 07c2235..cfa93cc 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/create.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/create.liquid
@@ -1,20 +1,27 @@
-{% comment %}
- Creates a user.
- Params:
- - email: string
- user's email address
- - password: string
- user's password
- - roles: Array[string]
- user's initial roles
-{% endcomment %}
+{% doc %}
+ @param {string} email - The email address
+ @param {string} first_name - The first name
+ @param {object} hook_params - Additional parameters to pass to hooks
+ @param {string} last_name - The last name
+ @param {string} password - The password
+ @param {string} roles - The roles to assign
+{% enddoc %}
{% liquid
- function object = 'modules/user/commands/user/create/build', email: email, password: password, hook_params: hook_params, roles: roles
+ function object = 'modules/user/commands/user/create/build', first_name: first_name, last_name: last_name, email: email, password: password, hook_params: hook_params, roles: roles
function object = 'modules/user/commands/user/create/check', object: object
if object.valid
- function object = 'modules/core/commands/execute', mutation_name: 'modules/user/user/create', object: object, selection: 'user'
- assign event_payload = null | hash_merge: user_id: object.id
+ function user = 'modules/core/commands/execute', mutation_name: 'modules/user/user/create', object: object, selection: 'user'
+ assign object.user_id = user.id
+
+ function profile = 'modules/user/commands/profiles/create', object: object
+ if profile.valid != true
+ return profile
+ endif
+
+ assign event_payload = {"user_id": user.id}
function _ = 'modules/core/commands/events/publish', type: 'user_created', object: event_payload, delay: null, max_attempts: null
+
+ return user
endif
return object
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/create/build.liquid b/pos-module-reports/modules/user/public/lib/commands/user/create/build.liquid
index 0c6d328..73386d4 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/create/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/create/build.liquid
@@ -1,30 +1,21 @@
-{% liquid
- if roles == null
- assign roles = '[]' | parse_json
- if context.constants.USER_DEFAULT_ROLE != blank
- assign roles = roles | array_add: context.constants.USER_DEFAULT_ROLE
- endif
- else
- assign roles_type = roles | type_of
- if roles_type == 'String'
- assign roles = roles | append: '' | split: ','
- elsif roles_type == 'Array'
- else
- # accepts only String and Array
- log roles, type: 'ERROR: roles must be an array or a coma separated string'
- assign roles = null
- endif
- endif
-%}
-
+{% doc %}
+ @param {string} email - The email address
+ @param {string} first_name - The first name
+ @param {object} hook_params - Additional parameters to pass to hooks
+ @param {string} last_name - The last name
+ @param {string} password - The password
+ @param {string} roles - The roles to assign
+{% enddoc %}
{% parse_json object %}
{
+ "first_name": {{ first_name | json }},
+ "last_name": {{ last_name | json }},
"email": {{ email | json }},
"password": {{ password | json }},
"hook_params": {{ hook_params | json }}
}
{% endparse_json %}
-{% hash_assign object['roles'] = roles %}
+{% assign object.roles = roles %}
{% return object %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/create/check.liquid b/pos-module-reports/modules/user/public/lib/commands/user/create/check.liquid
index c7da643..61ab6b5 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/create/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/create/check.liquid
@@ -1,22 +1,26 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
-
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password'
- function c = 'modules/core/validations/password_complexity', c: c, object: object, field_name: 'password', key: null
+ assign c = { "errors": {}, "valid": true }
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'first_name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'last_name', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password', key: null
+ function c = 'modules/core/validations/password_complexity', c: c, object: object, field_name: 'password', maximum: null, minimum: null
function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email', key: 'modules/user/validation.email.required'
- function c = 'modules/core/validations/length', c: c, object: object, field_name: 'roles', minimum: 0, allow_blank: true
+ function c = 'modules/core/validations/length', c: c, object: object, field_name: 'roles', minimum: 0, allow_blank: true, is: null, maximum: null, message_is: null, message_maximum: null, message_minimum: null, value: null
function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email', key: 'modules/user/validation.email.format'
if object.email != blank
graphql user_exists = 'modules/user/user/list', email: object.email
if user_exists.users.total_entries > 0
assign message = 'modules/user/validation.user_exists' | t
- function c = 'modules/core/helpers/register_error', contract: c, field_name: 'email', message: message
+ function c = 'modules/core/helpers/register_error', contract: c, field_name: 'email', message: message, key: null
endif
endif
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/delete.liquid b/pos-module-reports/modules/user/public/lib/commands/user/delete.liquid
index 31ba099..d2253c5 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/delete.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/delete.liquid
@@ -1,18 +1,15 @@
-{% comment %}
- Deletes a user.
- Params:
- - id: string
- the user's id
-{% endcomment %}
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
graphql user = 'modules/user/user/delete', id: id
unless user.errors
- assign params = '{}' | parse_json | hash_merge: user: user.user
+ assign params = { "user": user.user }
function results = 'modules/core/commands/hook/fire', hook: 'user_delete', params: params, merge_to_object: null
- hash_assign user['hook_results'] = results
+ assign user.hook_results = results
- assign event_payload = null | hash_merge: user_id: id
+ assign event_payload = {"user_id": id}
function _ = 'modules/core/commands/events/publish', type: 'user_deleted', object: event_payload, delay: null, max_attempts: null
endunless
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/email_update.liquid b/pos-module-reports/modules/user/public/lib/commands/user/email_update.liquid
new file mode 100644
index 0000000..e5abab0
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/email_update.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {object} current_user - The current user object
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/user/email_update/build', object: object, current_user: current_user
+ function object = 'modules/user/commands/user/email_update/check', object: object, current_user: current_user
+
+ if object.valid
+ function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/user/email_update', selection: 'user'
+ endif
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/email_update/build.liquid b/pos-module-reports/modules/user/public/lib/commands/user/email_update/build.liquid
new file mode 100644
index 0000000..e2a8c18
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/email_update/build.liquid
@@ -0,0 +1,9 @@
+{% doc %}
+ @param {object} current_user - The current user object
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign object = {"id": current_user.id, "email": object.email, "password": object.password}
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/email_update/check.liquid b/pos-module-reports/modules/user/public/lib/commands/user/email_update/check.liquid
new file mode 100644
index 0000000..02c2ef4
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/email_update/check.liquid
@@ -0,0 +1,28 @@
+{% doc %}
+ @param {object} current_user - The current user object
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email', key: null
+ function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email', key: null
+ if object.email != blank and object.email != current_user.email
+ graphql emails_count = 'modules/user/user/emails_count', email: object.email | dig: 'users', 'total_entries'
+ if emails_count > 0
+ render 'modules/core/helpers/register_error', contract: c, field_name: 'email', key: 'app.errors.taken', message: null
+ endif
+ endif
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password', key: null
+ if object.password
+ function r = 'modules/core/commands/execute', mutation_name: 'modules/user/user/verify_password_for_user_id' object: object, selection: 'users'
+ assign user = r.results.first
+
+ function c = 'modules/core/validations/truthy', c: c, field_name: 'password', object: user.authenticate, key: 'app.errors.invalid_password'
+ endif
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/roles/append.liquid b/pos-module-reports/modules/user/public/lib/commands/user/roles/append.liquid
deleted file mode 100644
index c9cb499..0000000
--- a/pos-module-reports/modules/user/public/lib/commands/user/roles/append.liquid
+++ /dev/null
@@ -1,12 +0,0 @@
-{% liquid
- assign object = '{}' | parse_json | hash_merge: valid: true, id: id, role : role
- function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/user/roles/append', selection: 'user'
-
- if object.errors == blank
-
- assign event_payload = null | hash_merge: user_id: id, role: role
- function _ = 'modules/core/commands/events/publish', type: 'user_role_appended', object: event_payload, delay: null, max_attempts: null
- endif
-
- return object
-%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/roles/remove.liquid b/pos-module-reports/modules/user/public/lib/commands/user/roles/remove.liquid
deleted file mode 100644
index e83891f..0000000
--- a/pos-module-reports/modules/user/public/lib/commands/user/roles/remove.liquid
+++ /dev/null
@@ -1,10 +0,0 @@
-{% liquid
- assign object = '{}' | parse_json | hash_merge: valid: true, id: id, role : role
- function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/user/roles/remove', selection: 'user'
-
- if object.errors == blank
- assign event_payload = null | hash_merge: user_id: id, role: role
- function _ = 'modules/core/commands/events/publish', type: 'user_role_removed', object: event_payload, delay: null, max_attempts: null
- endif
- return object
-%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/roles/set.liquid b/pos-module-reports/modules/user/public/lib/commands/user/roles/set.liquid
deleted file mode 100644
index 0662c3c..0000000
--- a/pos-module-reports/modules/user/public/lib/commands/user/roles/set.liquid
+++ /dev/null
@@ -1,10 +0,0 @@
-{% liquid
- assign object = '{}' | parse_json | hash_merge: valid: true, id: id, roles: roles
- function object = 'modules/core/commands/execute', object: object, mutation_name: 'modules/user/user/roles/set', selection: 'user'
-
- if object.errors == blank
- assign event_payload = null | hash_merge: user_id: id, roles: roles
- function _ = 'modules/core/commands/events/publish', type: 'user_roles_set', object: event_payload, delay: null, max_attempts: null
- endif
- return object
-%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/update.liquid b/pos-module-reports/modules/user/public/lib/commands/user/update.liquid
index d2502fa..547bf48 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/update.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/update.liquid
@@ -1,37 +1,30 @@
-{% comment %}
- Updates a user.
- Params:
- - id: string
- - email: string
- the user's email address
- - password: string
- the user's password
- - hook_params: object
- the other params that will be passed to hook_user_update
-{% endcomment %}
+{% doc %}
+ @param {string} email - The email address
+ @param {object} hook_params - Additional parameters to pass to hooks
+ @param {string} id - The record ID
+ @param {string} password - The password
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/user/update/build', id: id, email: email, password: password
function object = 'modules/user/commands/user/update/check', object: object
if object.valid
graphql user = 'modules/user/user/update', args: object
- hash_assign object['update_result'] = user
+ assign object.update_result = user
unless user.errors
- assign params = '{}' | parse_json | hash_merge: updated_user: user.user, hook_params: hook_params
- # todo: merge_to_object for hooks with the same name will overwrite the validity of previous results
+ assign params = { "updated_user": user.user, "hook_params": hook_params }
function results = 'modules/core/commands/hook/fire', hook: 'user_update', params: params, merge_to_object: true
for result in results
- # using the errors key for a quick workaround for now
if result[1].valid == false or result[1].errors != blank
- hash_assign object['valid'] = false
- hash_assign object['errors'] = result[1].errors
+ assign object.valid = false
+ assign object.errors = result[1].errors
break
endif
endfor
- hash_assign object['hook_results'] = results
+ assign object.hook_results = results
endunless
- assign event_payload = null | hash_merge: user_id: object.id
+ assign event_payload = {"user_id": object.id}
function _ = 'modules/core/commands/events/publish', type: 'user_updated', object: event_payload, delay: null, max_attempts: null
endif
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/update/build.liquid b/pos-module-reports/modules/user/public/lib/commands/user/update/build.liquid
index 978272d..9f26288 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/update/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/update/build.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} id - The record ID
+ @param {string} password - The password
+{% enddoc %}
{% parse_json object %}
{
"id": {{ id | json }},
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/update/check.liquid b/pos-module-reports/modules/user/public/lib/commands/user/update/check.liquid
index 3719f9e..733c74c 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/update/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/update/check.liquid
@@ -1,12 +1,15 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
if object['email']
- function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email'
+ function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email', key: null
endif
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_otp.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp.liquid
new file mode 100644
index 0000000..0e7066f
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp.liquid
@@ -0,0 +1,10 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ function object = 'modules/user/commands/user/verify_otp/build', email: email
+ function object = 'modules/user/commands/user/verify_otp/check', object: object
+
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/build.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/build.liquid
new file mode 100644
index 0000000..ad5f2b9
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/build.liquid
@@ -0,0 +1,14 @@
+{% doc %}
+ @param {string} email - The email address
+{% enddoc %}
+{% parse_json object %}
+ {
+ "email": {{ email | default: object.email | json }},
+ "password": {{ object.password | json }},
+ "otp_code": {{ object.otp_code | json }}
+ }
+{% endparse_json %}
+
+{% liquid
+ return object
+%}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/check.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/check.liquid
new file mode 100644
index 0000000..a6b4d75
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_otp/check.liquid
@@ -0,0 +1,24 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+{% liquid
+ assign c = { "errors": {}, "valid": true }
+
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'otp_code', key: null
+
+ if c.valid
+ function r = 'modules/core/commands/execute', mutation_name: 'modules/user/user/verify_otp' object: object, selection: 'users'
+ assign user = r.results.first
+
+ function c = 'modules/core/validations/truthy', c: c, field_name: 'otp_code', object: user.authenticate, key: 'modules/user/2fa.errors.otp_code'
+ function c = 'modules/core/validations/truthy', c: c, field_name: 'password', object: user.authenticate, key: 'modules/user/2fa.errors.password'
+ assign object.id = user.id
+ endif
+
+ assign object.valid = c.valid
+ assign object.errors = c.errors
+
+ return object
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_password.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_password.liquid
index 58bdd42..baa0326 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/verify_password.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_password.liquid
@@ -1,10 +1,7 @@
-{% comment %}
- Verifies a user's password.
- Params:
- - email: string
- the user's email address
- - password: string
-{% endcomment %}
+{% doc %}
+ @param {string} email - The email address
+ @param {string} password - The password
+{% enddoc %}
{% liquid
function object = 'modules/user/commands/user/verify_password/build', email: email, password: password
function object = 'modules/user/commands/user/verify_password/check', object: object
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_password/build.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_password/build.liquid
index f1bbf6c..47b72f7 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/verify_password/build.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_password/build.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} password - The password
+{% enddoc %}
{% parse_json object %}
{
"email": {{ email | json }},
diff --git a/pos-module-reports/modules/user/public/lib/commands/user/verify_password/check.liquid b/pos-module-reports/modules/user/public/lib/commands/user/verify_password/check.liquid
index 19a55b6..3b76b90 100644
--- a/pos-module-reports/modules/user/public/lib/commands/user/verify_password/check.liquid
+++ b/pos-module-reports/modules/user/public/lib/commands/user/verify_password/check.liquid
@@ -1,20 +1,23 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email'
- function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password'
+ function c = 'modules/core/validations/email', c: c, object: object, field_name: 'email', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'email', key: null
+ function c = 'modules/core/validations/presence', c: c, object: object, field_name: 'password', key: null
if c.valid
graphql user = 'modules/user/user/verify_password', args: object
assign user = user.users.results.first
function c = 'modules/core/validations/truthy', c: c, field_name: 'password', object: user.authenticate, key: 'modules/user/validation.invalid_email_or_password'
- hash_assign object['id'] = user.id
+ assign object.id = user.id
endif
- hash_assign object['valid'] = c.valid
- hash_assign object['errors'] = c.errors
+ assign object.valid = c.valid
+ assign object.errors = c.errors
return object
-%}
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/events/authentication_link_created.liquid b/pos-module-reports/modules/user/public/lib/events/authentication_link_created.liquid
index 6a9dfa1..41be3c9 100644
--- a/pos-module-reports/modules/user/public/lib/events/authentication_link_created.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/authentication_link_created.liquid
@@ -3,10 +3,13 @@ metadata:
event:
email
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'email'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'email', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/impersonation_ended.liquid b/pos-module-reports/modules/user/public/lib/events/impersonation_ended.liquid
index 0281e88..4b78d11 100644
--- a/pos-module-reports/modules/user/public/lib/events/impersonation_ended.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/impersonation_ended.liquid
@@ -4,11 +4,14 @@ metadata:
actor_id
impersonation_ended
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'impersonation_ended'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'impersonation_ended', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/impersonation_started.liquid b/pos-module-reports/modules/user/public/lib/events/impersonation_started.liquid
index 258fb32..70121d1 100644
--- a/pos-module-reports/modules/user/public/lib/events/impersonation_started.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/impersonation_started.liquid
@@ -5,11 +5,14 @@ metadata:
target_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'target_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'actor_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'target_id', key: null
return c
diff --git a/pos-module-reports/modules/user/public/lib/events/password_created.liquid b/pos-module-reports/modules/user/public/lib/events/password_created.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/password_created.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/password_created.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_created.liquid b/pos-module-reports/modules/user/public/lib/events/user_created.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_created.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_created.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_deleted.liquid b/pos-module-reports/modules/user/public/lib/events/user_deleted.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_deleted.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_deleted.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_logout.liquid b/pos-module-reports/modules/user/public/lib/events/user_logout.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_logout.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_logout.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_role_appended.liquid b/pos-module-reports/modules/user/public/lib/events/user_role_appended.liquid
index 69fbfdc..6a7476c 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_role_appended.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_role_appended.liquid
@@ -1,14 +1,17 @@
---
metadata:
event:
- user_id
+ profile_id
role
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'role'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'profile_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'role', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_role_removed.liquid b/pos-module-reports/modules/user/public/lib/events/user_role_removed.liquid
index 69fbfdc..6a7476c 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_role_removed.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_role_removed.liquid
@@ -1,14 +1,17 @@
---
metadata:
event:
- user_id
+ profile_id
role
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'role'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'profile_id', key: null
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'role', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_roles_set.liquid b/pos-module-reports/modules/user/public/lib/events/user_roles_set.liquid
index 2e82e37..d04e39c 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_roles_set.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_roles_set.liquid
@@ -1,14 +1,17 @@
---
metadata:
event:
- user_id
+ profile_id
roles
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
- function c = 'modules/core/validations/length', c: c, object: event, field_name: 'roles', minimum: 0, allow_blank: false
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'profile_id', key: null
+ function c = 'modules/core/validations/length', c: c, object: event, field_name: 'roles', minimum: 0, allow_blank: false, is: null, maximum: null, message_is: null, message_maximum: null, message_minimum: null, value: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_signed_in.liquid b/pos-module-reports/modules/user/public/lib/events/user_signed_in.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_signed_in.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_signed_in.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/events/user_updated.liquid b/pos-module-reports/modules/user/public/lib/events/user_updated.liquid
index 427444a..56dc2e4 100644
--- a/pos-module-reports/modules/user/public/lib/events/user_updated.liquid
+++ b/pos-module-reports/modules/user/public/lib/events/user_updated.liquid
@@ -3,10 +3,13 @@ metadata:
event:
user_id
---
+{% doc %}
+ @param {object} event - The event object
+{% enddoc %}
{% liquid
- assign c = '{ "errors": {}, "valid": true }' | parse_json
+ assign c = { "errors": {}, "valid": true }
- function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id'
+ function c = 'modules/core/validations/presence', c: c, object: event, field_name: 'user_id', key: null
return c
%}
diff --git a/pos-module-reports/modules/user/public/lib/helpers/.keep b/pos-module-reports/modules/user/public/lib/helpers/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/pos-module-reports/modules/user/public/lib/helpers/can_do.liquid b/pos-module-reports/modules/user/public/lib/helpers/can_do.liquid
index 1467f59..626789c 100644
--- a/pos-module-reports/modules/user/public/lib/helpers/can_do.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/can_do.liquid
@@ -1,15 +1,9 @@
-{% comment %}
- Checks if the requester can do domething on the given entiry.
-
- Params:
- - requester Object
- The requester must have a string array field called 'roles'
- - entity Object
- - do String
- - access_callback String
- The callback function that checks the request. By default searches that the `requester`
- has `do` permission or not.
-{% endcomment %}
+{% doc %}
+ @param {string} access_callback - Custom authorization callback path
+ @param {string} do - The permission to check
+ @param {object} entity - The entity to check access against
+ @param {object} requester - The user profile requesting access
+{% enddoc %}
{% liquid
assign roles_type = requester.roles | type_of
unless roles_type == 'Array'
diff --git a/pos-module-reports/modules/user/public/lib/helpers/can_do_or_redirect.liquid b/pos-module-reports/modules/user/public/lib/helpers/can_do_or_redirect.liquid
index 042bee2..af52c14 100644
--- a/pos-module-reports/modules/user/public/lib/helpers/can_do_or_redirect.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/can_do_or_redirect.liquid
@@ -1,17 +1,10 @@
-{% comment %}
- Redirects if the the requester does not have right to do something on the given entity.
-
- Params:
- - requester Object
- The requester must has a string array field called 'permissions'
- - entity Object
- - do String
- - access_callback String
- The callback function that checks the request. By default searches that the `requester`
- has `do` permission or not.
- - return_url String
- The url where to redirect if the requester does not have right to do something in the given entity.
-{% endcomment %}
+{% doc %}
+ @param {string} access_callback - Custom authorization callback path
+ @param {string} do - The permission to check
+ @param {object} entity - The entity to check access against
+ @param {object} requester - The user profile requesting access
+ @param {string} return_url - URL to redirect to
+{% enddoc %}
{% liquid
function can = 'modules/user/helpers/can_do', requester: requester, entity: entity, do: do, access_callback: access_callback
unless can
diff --git a/pos-module-reports/modules/user/public/lib/helpers/can_do_or_unauthorized.liquid b/pos-module-reports/modules/user/public/lib/helpers/can_do_or_unauthorized.liquid
index 406e312..d20dcf9 100644
--- a/pos-module-reports/modules/user/public/lib/helpers/can_do_or_unauthorized.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/can_do_or_unauthorized.liquid
@@ -1,32 +1,28 @@
-{% comment %}
- Renders 401 if the the requester does not have right to do something on the given entity.
-
- Params:
- - requester Object
- The requester must has a string array field called 'permissions'
- - entity Object
- - do String
- - redirect_anonymous_to_login Boolean
- - anonymous_return_to
- Only works if redirect_anonymous_to_login is set to true. This parameter sets context.session.return_to, which is used in /sessions/create endpoint after successful login
- - access_callback String
- The callback function that checks the request. By default searches that the `requester`
- has `do` permission or not.
-{% endcomment %}
+{% doc %}
+ @param {string} access_callback - Custom authorization callback path
+ @param {string} anonymous_return_to - URL to redirect anonymous users to
+ @param {string} do - The permission to check
+ @param {object} entity - The entity to check access against
+ @param {string} forbidden_partial - Custom partial to render for forbidden access
+ @param {boolean} redirect_anonymous_to_login - Whether to redirect anonymous users to login
+ @param {object} requester - The user profile requesting access
+{% enddoc %}
{% liquid
function can = 'modules/user/helpers/can_do', requester: requester, entity: entity, do: do, access_callback: access_callback
unless can
if requester.roles contains 'anonymous' and redirect_anonymous_to_login
session return_to = anonymous_return_to | default: context.location.href
assign info = 'modules/user/authorization.redirect_anonymous_info' | t
- include 'modules/core/helpers/redirect_to', url: '/sessions/new', info: info
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', url: '/sessions/new', info: info, default: null, error: null, format: null, notice: null, object: null
+ # platformos-check-enable DeprecatedTag
else
response_status 403
- try
- theme_render_rc 'components/pages/403'
- catch err
- render 'modules/user/components/pages/403' #TODO
- endtry
+ if forbidden_partial
+ # platformos-check-disable DeprecatedTag
+ include forbidden_partial
+ # platformos-check-enable DeprecatedTag
+ endif
break
endif
endunless
diff --git a/pos-module-reports/modules/user/public/lib/helpers/current_profile.liquid b/pos-module-reports/modules/user/public/lib/helpers/current_profile.liquid
new file mode 100644
index 0000000..3dc7e45
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/helpers/current_profile.liquid
@@ -0,0 +1,17 @@
+{% liquid
+ function user = 'modules/user/queries/user/current'
+ if user.id == null
+ assign current_profile = { "user": null, "roles": ["anonymous"] }
+ else
+ function current_profile = 'modules/user/queries/profiles/find', user_id: user.id, id: null, uuid: null, first_name: null, last_name: null
+ assign current_profile.user = user
+ if current_profile.roles != null
+ assign current_profile.roles << 'authenticated'
+ else
+ assign current_profile.roles = ["authenticated"]
+ endif
+ endif
+
+ export current_profile
+ return current_profile
+ %}
diff --git a/pos-module-reports/modules/user/public/lib/helpers/flash.liquid b/pos-module-reports/modules/user/public/lib/helpers/flash.liquid
index 5087333..ced9354 100644
--- a/pos-module-reports/modules/user/public/lib/helpers/flash.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/flash.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {string} error - The error flash message
+ @param {boolean} force_clear - If true, clear flash messages immediately
+ @param {string} info - The info flash message
+ @param {string} notice - The notice flash message
+{% enddoc %}
{% liquid
assign error = error
assign notice = notice
@@ -14,7 +20,7 @@
assign message = info | t
assign severity = 'info'
endif
- assign flash = null | hash_merge: message: message, severity: severity, from: context.location.pathname, force_clear: force_clear
+ assign flash = {"message": message, "severity": severity, "from": context.location.pathname, "force_clear": force_clear}
function _ = 'modules/core/commands/session/set', key: 'sflash', value: flash
diff --git a/pos-module-reports/modules/user/public/lib/helpers/get_assigned_oauth_providers.liquid b/pos-module-reports/modules/user/public/lib/helpers/get_assigned_oauth_providers.liquid
new file mode 100644
index 0000000..225b059
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/helpers/get_assigned_oauth_providers.liquid
@@ -0,0 +1,7 @@
+{% liquid
+ function current_user = 'modules/user/queries/user/current'
+ graphql g = 'modules/user/oauth/find_by_user_id', user_id: current_user.id
+
+ assign providers = g.records.results | map: 'provider'
+ return providers
+%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/lib/helpers/get_available_oauth_providers.liquid b/pos-module-reports/modules/user/public/lib/helpers/get_available_oauth_providers.liquid
new file mode 100644
index 0000000..7153b6c
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/helpers/get_available_oauth_providers.liquid
@@ -0,0 +1,22 @@
+{% liquid
+ assign available_providers = {}
+ assign keys = context.constants | hash_keys
+ for item in keys
+ assign starts_with = item | start_with: "OAUTH2_"
+ assign ends_with = item | end_with: "_PROVIDER"
+ if starts_with and ends_with and context.constants[item] != null
+ assign provider_id = item | replace: "OAUTH2_", "" | replace: "_PROVIDER", "" | upcase
+
+ assign provider_key = "OAUTH2_" | append: provider_id | append: "_PROVIDER"
+ assign name_key = "OAUTH2_" | append: provider_id | append: "_NAME"
+ assign client_id_key = "OAUTH2_" | append: provider_id | append: "_CLIENT_ID"
+ assign secret_value_key = "OAUTH2_" | append: provider_id | append: "_SECRET_VALUE"
+
+ assign provider_data = { "key": context.constants[provider_key], "name": context.constants[name_key], "client_id": context.constants[client_id_key], "secret_value": context.constants[secret_value_key] }
+
+ assign available_providers[provider_id] = provider_data
+ endif
+ endfor
+
+ return available_providers
+ %}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/lib/helpers/profiles/slugs/build.liquid b/pos-module-reports/modules/user/public/lib/helpers/profiles/slugs/build.liquid
new file mode 100644
index 0000000..56f02cb
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/helpers/profiles/slugs/build.liquid
@@ -0,0 +1,12 @@
+{% doc %}
+ @param {object} current_profile - The current user profile
+ @param {object} profile - The profile object
+{% enddoc %}
+{% liquid
+ assign profile = profile | default: current_profile
+ assign first_name = profile.first_name
+ assign last_name = profile.last_name
+ assign slug = first_name | append: '-' | append: last_name | append: '-' | append: profile.id | slugify
+
+ return slug
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/helpers/table_name.liquid b/pos-module-reports/modules/user/public/lib/helpers/table_name.liquid
similarity index 65%
rename from pos-module-reports/modules/profile/public/lib/helpers/table_name.liquid
rename to pos-module-reports/modules/user/public/lib/helpers/table_name.liquid
index f31aef7..2988af3 100644
--- a/pos-module-reports/modules/profile/public/lib/helpers/table_name.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/table_name.liquid
@@ -1,5 +1,5 @@
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
return profile_module | append: '/profile'
%}
diff --git a/pos-module-reports/modules/user/public/lib/helpers/user_from_temporary_token.liquid b/pos-module-reports/modules/user/public/lib/helpers/user_from_temporary_token.liquid
index 044fe7c..a9320f5 100644
--- a/pos-module-reports/modules/user/public/lib/helpers/user_from_temporary_token.liquid
+++ b/pos-module-reports/modules/user/public/lib/helpers/user_from_temporary_token.liquid
@@ -1,9 +1,13 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} token - The authentication token
+{% enddoc %}
{% liquid
if token == blank or email == blank
return null
endif
- function user = 'modules/user/queries/user/find', email: email
+ function user = 'modules/user/queries/user/find', email: email, id: null, with_token: null
if user
assign authenticated = token | is_token_valid: user.id
diff --git a/pos-module-reports/modules/user/public/lib/hooks/hook_admin_page.liquid b/pos-module-reports/modules/user/public/lib/hooks/hook_admin_page.liquid
deleted file mode 100644
index 62da040..0000000
--- a/pos-module-reports/modules/user/public/lib/hooks/hook_admin_page.liquid
+++ /dev/null
@@ -1,29 +0,0 @@
-{% comment %}
- Implements hook_admin_page.
-{% endcomment %}
-
-{% parse_json admin_pages %}
-[
- {
- "relative_path": "/admin/users",
- "partial": "modules/user/admin_pages/list",
- "menu": {
- "title": "Users",
- "link_attributes": {}
- },
- "permission": "admin.users.manage"
- },
- {
- "relative_path": null,
- "menu": {
- "title": "Log out",
- "link_attributes": {
- "href": "/sessions/destroy"
- }
- },
- "permission": "sessions.destroy"
- }
-]
-{% endparse_json %}
-
-{% return admin_pages %}
diff --git a/pos-module-reports/modules/user/public/lib/queries/api_call.liquid b/pos-module-reports/modules/user/public/lib/queries/api_call.liquid
new file mode 100644
index 0000000..b6389e2
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/api_call.liquid
@@ -0,0 +1,11 @@
+{% doc %}
+ @param {string} api_template - The API call template path
+ @param {number} timeout - Request timeout in seconds
+{% enddoc %}
+{%- liquid
+ graphql g = 'modules/user/api_call', api_template: api_template, data: data, timeout: timeout
+ if g.api_call_send == blank
+ log g, type: "QUERY ERROR"
+ endif
+ return g.api_call_send
+-%}
diff --git a/pos-module-reports/modules/user/public/lib/queries/profiles/filters.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/filters.liquid
new file mode 100644
index 0000000..4370421
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/filters.liquid
@@ -0,0 +1,13 @@
+{% doc %}
+ @param {object} params - The request parameters
+{% enddoc %}
+{% liquid
+ assign sort_options = {"first_name_desc": {"properties": {"name": "first_name", "order": "DESC"}}, "first_name_asc": {"properties": {"name": "first_name", "order": "ASC"}}}
+ assign filters = {}
+ assign filters.page = params.page | to_positive_integer: 1
+ assign filters.keyword = params.keyword | default: ''
+ assign filters.sort_by = params.sort_by | default: 'first_name_desc'
+ assign filters.sort = sort_options[filters.sort_by]
+
+ return filters
+ %}
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/filters_proxy.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/filters_proxy.liquid
similarity index 62%
rename from pos-module-reports/modules/profile/public/lib/queries/profiles/filters_proxy.liquid
rename to pos-module-reports/modules/user/public/lib/queries/profiles/filters_proxy.liquid
index e8cf272..99f3cdd 100644
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/filters_proxy.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/filters_proxy.liquid
@@ -1,5 +1,8 @@
+{% doc %}
+ @param {object} params - The request parameters
+{% enddoc %}
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
assign function_name = profile_module | append: '/queries/profiles/filters'
function filters = function_name, params: params
diff --git a/pos-module-reports/modules/user/public/lib/queries/profiles/find.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/find.liquid
new file mode 100644
index 0000000..a997b5c
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/find.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {string} first_name - The first name
+ @param {string} id - The record ID
+ @param {string} last_name - The last name
+ @param {string} user_id - The user ID
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ if user_id == blank and id == blank and uuid == blank
+ log 'ERROR: missing ID argument in modules/user/queries/profile/find'
+ return nil
+ endif
+
+ graphql result = 'modules/user/profiles/search', user_id: user_id, id: id, first_name: first_name, last_name: last_name, uuid: uuid, limit: 1, page: 1
+ assign profile = result.records.results.first
+
+ if profile
+ function slug = 'modules/user/helpers/profiles/slugs/build', current_profile: profile, profile: null
+ assign profile.slug = slug
+ endif
+
+ return profile
+%}
diff --git a/pos-module-reports/modules/profile/public/lib/queries/profiles/find_proxy.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/find_proxy.liquid
similarity index 50%
rename from pos-module-reports/modules/profile/public/lib/queries/profiles/find_proxy.liquid
rename to pos-module-reports/modules/user/public/lib/queries/profiles/find_proxy.liquid
index 94409e5..044bc92 100644
--- a/pos-module-reports/modules/profile/public/lib/queries/profiles/find_proxy.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/find_proxy.liquid
@@ -1,5 +1,11 @@
+{% doc %}
+ @param {object} filters - The filter parameters
+ @param {string} id - The record ID
+ @param {string} user_id - The user ID
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
{% liquid
- function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/profile', type: null
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
assign function_name = profile_module | append: '/queries/profiles/find'
function profile = function_name, user_id: user_id, id: id, uuid: uuid, filters: filters
return profile
diff --git a/pos-module-reports/modules/user/public/lib/queries/profiles/search.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/search.liquid
new file mode 100644
index 0000000..8ffac73
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/search.liquid
@@ -0,0 +1,36 @@
+{% doc %}
+ @param {string} emails - List of email addresses
+ @param {string} first_name - The first name
+ @param {string} id - The record ID
+ @param {string} ids - List of record IDs to include
+ @param {string} last_name - The last name
+ @param {number} limit - Maximum number of results
+ @param {string} not_ids - List of record IDs to exclude
+ @param {number} page - Page number for pagination
+ @param {string} query - Search query string
+ @param {string} sort - Sort order
+ @param {string} user_id - The user ID
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ assign page = page | to_positive_integer: 1
+ if not_ids == blank
+ assign not_ids = null
+ endif
+
+ graphql r = 'modules/user/profiles/search', limit: limit, uuid: uuid, id: id, ids: ids, first_name: first_name , last_name: last_name , user_id: user_id, not_ids: not_ids, query: query, emails: emails, sort: sort, page: page
+
+ assign records = r.records
+ assign profiles = []
+ for profile in records.results
+ function slug = 'modules/user/helpers/profiles/slugs/build' , current_profile: profile, profile: null
+ assign profile.slug = slug
+ assign p = profile
+
+ assign profiles << p
+ endfor
+ assign records.results = profiles
+
+ return records
+%}
+
diff --git a/pos-module-reports/modules/user/public/lib/queries/profiles/search_proxy.liquid b/pos-module-reports/modules/user/public/lib/queries/profiles/search_proxy.liquid
new file mode 100644
index 0000000..586fb1e
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/profiles/search_proxy.liquid
@@ -0,0 +1,22 @@
+{% doc %}
+ @param {string} emails - List of email addresses
+ @param {object} filters - The filter parameters
+ @param {string} first_name - The first name
+ @param {string} id - The record ID
+ @param {string} ids - List of record IDs to include
+ @param {string} last_name - The last name
+ @param {number} limit - Maximum number of results
+ @param {string} not_ids - List of record IDs to exclude
+ @param {number} page - Page number for pagination
+ @param {string} query - Search query string
+ @param {string} sort - Sort order
+ @param {string} user_id - The user ID
+ @param {string} uuid - The UUID identifier
+{% enddoc %}
+{% liquid
+ function profile_module = 'modules/core/queries/variable/get', name: 'PROFILE_MODULE', default: 'modules/user', type: null
+ assign function_name = profile_module | append: '/queries/profiles/search'
+ function profile = function_name, limit: limit, uuid: uuid, id: id, ids: ids, first_name: first_name, last_name: last_name, user_id: user_id, not_ids: not_ids, query: query, emails: emails, sort: sort, page: page, filters: filters
+
+ return profile
+%}
diff --git a/pos-module-reports/modules/user/public/lib/queries/registration_fields/load.liquid b/pos-module-reports/modules/user/public/lib/queries/registration_fields/load.liquid
index 0864892..7c8c4a1 100644
--- a/pos-module-reports/modules/user/public/lib/queries/registration_fields/load.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/registration_fields/load.liquid
@@ -4,20 +4,14 @@
{% parse_json fields %}
[
- {
- "name": "email",
- "required": true,
- "type": "email",
- "weight": 0,
- "label": "Email"
- },
- {
- "name": "password",
- "required": true,
- "type": "password",
- "weight": 1,
- "label": "Password"
- }
+ {% comment %}
+ Example value:
+ {
+ "name": "email",
+ "type": "email",
+ "label": "Email"
+ }
+ {% endcomment %}
]
{% endparse_json %}
{% liquid
diff --git a/pos-module-reports/modules/user/public/lib/queries/role_permissions/permissions.liquid b/pos-module-reports/modules/user/public/lib/queries/role_permissions/permissions.liquid
index 12376fd..5557577 100644
--- a/pos-module-reports/modules/user/public/lib/queries/role_permissions/permissions.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/role_permissions/permissions.liquid
@@ -4,7 +4,10 @@
"{{ context.constants.USER_DEFAULT_ROLE }}": [],
{% endif %}
"anonymous": ["sessions.create", "users.register"],
- "authenticated": ["sessions.destroy"]
+ "authenticated": ["sessions.destroy","oauth.manage"],
+ "admin": ["admin_pages.view", "admin.users.manage", "users.impersonate"],
+ "member": ["profile.manage"],
+ "superadmin": ["users.impersonate_superadmin"]
}
{% endparse_json %}
diff --git a/pos-module-reports/modules/user/public/lib/queries/user/current.liquid b/pos-module-reports/modules/user/public/lib/queries/user/current.liquid
index 0003a8e..80c343a 100644
--- a/pos-module-reports/modules/user/public/lib/queries/user/current.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/user/current.liquid
@@ -1,12 +1,11 @@
{% comment %}
- Loads the current user. Automatically adds `authenticated` role or `anonymous` role, depending if the user is logged in or not
+ Loads the current user.
{% endcomment %}
{% liquid
if context.current_user
function user = 'modules/user/queries/user/load', id: context.current_user.id
- hash_assign user['roles'] = user['roles'] | array_add: 'authenticated'
else
- assign user = '{ "roles": ["anonymous"] }' | parse_json
+ assign user = null
endif
return user
%}
diff --git a/pos-module-reports/modules/user/public/lib/queries/user/find.liquid b/pos-module-reports/modules/user/public/lib/queries/user/find.liquid
index f121e76..665863e 100644
--- a/pos-module-reports/modules/user/public/lib/queries/user/find.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/user/find.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} id - The record ID
+ @param {string} with_token - Include temporary token in results
+{% enddoc %}
{% liquid
assign id = id
assign email = email
diff --git a/pos-module-reports/modules/user/public/lib/queries/user/load.liquid b/pos-module-reports/modules/user/public/lib/queries/user/load.liquid
index efdb00a..8f6e0d0 100644
--- a/pos-module-reports/modules/user/public/lib/queries/user/load.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/user/load.liquid
@@ -1,9 +1,6 @@
-{% comment %}
- Loads a user's data.
- Params:
- - id: string
- the user's id
-{% endcomment %}
+{% doc %}
+ @param {string} id - The record ID
+{% enddoc %}
{% liquid
graphql g = 'modules/user/user/load', id: id
diff --git a/pos-module-reports/modules/user/public/lib/queries/user/otp.liquid b/pos-module-reports/modules/user/public/lib/queries/user/otp.liquid
new file mode 100644
index 0000000..0553906
--- /dev/null
+++ b/pos-module-reports/modules/user/public/lib/queries/user/otp.liquid
@@ -0,0 +1,23 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} name
+{% enddoc %}
+{% liquid
+ if email == blank
+ log 'Something went wrong. Email cannot be blank.', type: 'ERROR'
+ return null
+ endif
+
+ # platformos-check-disable TranslationKeyExists
+ assign issuer = 'app.title' | t: default: 'App'
+ # platformos-check-enable TranslationKeyExists
+ graphql r = 'modules/user/user/otp', email: email, issuer: issuer
+
+ if r.errors
+ assign type = 'ERROR' | append: name
+ log r, type: type
+ break
+ endif
+
+ return r.users.results.first
+%}
diff --git a/pos-module-reports/modules/user/public/lib/queries/user/search.liquid b/pos-module-reports/modules/user/public/lib/queries/user/search.liquid
index 5045094..7d0e61f 100644
--- a/pos-module-reports/modules/user/public/lib/queries/user/search.liquid
+++ b/pos-module-reports/modules/user/public/lib/queries/user/search.liquid
@@ -1,7 +1,15 @@
+{% doc %}
+ @param {string} email - The email address
+ @param {string} id - The record ID
+ @param {number} limit - Maximum number of results
+ @param {string} not_ids - List of record IDs to exclude
+ @param {number} page - Page number for pagination
+ @param {string} sort - Sort order
+{% enddoc %}
{% liquid
assign limit = limit | default: 20
assign page = page | to_positive_integer: 1
- graphql r = 'modules/user/user/search', id: id, not_ids: not_ids, email: email, role: role, roles: roles, page: page, limit: limit, sort: sort
+ graphql r = 'modules/user/user/search', id: id, not_ids: not_ids, email: email, page: page, limit: limit, sort: sort
return r.users
%}
diff --git a/pos-module-reports/modules/user/public/schema/oauth.yml b/pos-module-reports/modules/user/public/schema/oauth.yml
new file mode 100644
index 0000000..2e88f77
--- /dev/null
+++ b/pos-module-reports/modules/user/public/schema/oauth.yml
@@ -0,0 +1,8 @@
+name: oauth
+properties:
+ - name: user_id
+ type: string
+ - name: provider
+ type: string
+ - name: sub
+ type: string
\ No newline at end of file
diff --git a/pos-module-reports/modules/profile/public/schema/profile.yml b/pos-module-reports/modules/user/public/schema/profile.yml
similarity index 72%
rename from pos-module-reports/modules/profile/public/schema/profile.yml
rename to pos-module-reports/modules/user/public/schema/profile.yml
index 94af257..1cdf1f8 100644
--- a/pos-module-reports/modules/profile/public/schema/profile.yml
+++ b/pos-module-reports/modules/user/public/schema/profile.yml
@@ -6,6 +6,12 @@ properties:
- name: first_name
- name: last_name
- name: email # duplication from user
+ - name: roles
+ type: array
# tokenized downcased names for searching
- name: c__names
+
+ # 2fa
+ - name: otp_configured
+ type: boolean
diff --git a/pos-module-reports/modules/user/public/translations/en/2fa.yml b/pos-module-reports/modules/user/public/translations/en/2fa.yml
new file mode 100644
index 0000000..813ae04
--- /dev/null
+++ b/pos-module-reports/modules/user/public/translations/en/2fa.yml
@@ -0,0 +1,25 @@
+en:
+ 2fa:
+ errors:
+ otp_code: Invalid OTP code provided.
+ password: Invalid password provided.
+ new:
+ enter_password: Enter password
+ your_password: Please enter your password.
+ submit: Submit
+ confirm_and_enable: Confirm and Enable Two Factor
+ two_factor_authentication: Two-factor authentication
+ scan_qr_code: Scan QR Code
+ 2fa_info: |-
+ To be able to log in you need to scan this QR Code with your authentication app.
+
+ You can use [Authy](https://authy.com) or [any other authentication tool](https://www.lastpass.com/two-factor-authentication).
+ if_you_cannot_scan: 'Or enter the following code manually in the app:'
+ confirm_otp_code: Confirm code
+ please_confirm: Enter 6-digit code from your two-factor authenticator app
+ disable:
+ two_factor_authentication: Disable two factor authentication
+ create:
+ success: Successfully enabled two factor authentication.
+ delete:
+ success: Successfully disabled two factor authentication.
diff --git a/pos-module-reports/modules/user/public/translations/en/oauth.yml b/pos-module-reports/modules/user/public/translations/en/oauth.yml
new file mode 100644
index 0000000..c57af4d
--- /dev/null
+++ b/pos-module-reports/modules/user/public/translations/en/oauth.yml
@@ -0,0 +1,13 @@
+en:
+ oauth:
+ app:
+ no_providers_available: 'There are no providers available'
+ provider_already_assigned: 'Selected provider is already in use.'
+ sub_already_assigned: 'External account is already connected to a different user.'
+ signed_in: 'Successfully signed in using OAuth 2.'
+ assigned_provider: 'Successfully assigned OAuth 2 provider.'
+ unassigned_provider: 'Successfully unassigned OAuth 2 provider.'
+ failed_to_create_account: 'Could not create a new account. Please try again later.'
+ invalid_request: 'Invalid request.'
+ unassign_provider: 'Unassign'
+ user_info_error: 'Could not fetch user info from OAuth 2 provider. Please try again later.'
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/translations/en/passwords.yml b/pos-module-reports/modules/user/public/translations/en/passwords.yml
index 22db0ef..0ffe4f4 100644
--- a/pos-module-reports/modules/user/public/translations/en/passwords.yml
+++ b/pos-module-reports/modules/user/public/translations/en/passwords.yml
@@ -3,6 +3,8 @@ en:
password: Password
password_confirmation: Confirm password
password_update: Update password
+ new_password: New password
+ confirm_new_password: Confirm new password
login: Login
register: Register
reset_password: Email an authentication link
@@ -11,3 +13,5 @@ en:
email_desc: Enter your registered email and we will send you a link to reset your password
reset_password_title: Reset password
expired_link: The reset password link you’ve entered is invalid or has expired.
+ remembered_password: You've remembered the password?
+ forgot: Forgot password?
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/translations/en/sessions.yml b/pos-module-reports/modules/user/public/translations/en/sessions.yml
new file mode 100644
index 0000000..d3c68fc
--- /dev/null
+++ b/pos-module-reports/modules/user/public/translations/en/sessions.yml
@@ -0,0 +1,8 @@
+en:
+ sessions:
+ new:
+ log_in: Log In
+ dont_have_account: Don't have an account?
+ request_to_join: Request to join
+ social_login_separator: or
+ back_to_login: Return to login page
diff --git a/pos-module-reports/modules/user/public/translations/en/users.yml b/pos-module-reports/modules/user/public/translations/en/users.yml
index 6b070d2..8163d8e 100644
--- a/pos-module-reports/modules/user/public/translations/en/users.yml
+++ b/pos-module-reports/modules/user/public/translations/en/users.yml
@@ -2,4 +2,11 @@ en:
users:
new:
create_account: Create an Account
+ already_have_account: Already have an account?
Log in
logout: Log out
+ email:
+ new_email: 'New email'
+ current_password: 'Current password'
+ change_email: 'Change email'
+ email_update: 'Update'
+ change_success: 'Email updated'
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/translations/en/validation.yml b/pos-module-reports/modules/user/public/translations/en/validation.yml
index 62657bf..07d8b3d 100644
--- a/pos-module-reports/modules/user/public/translations/en/validation.yml
+++ b/pos-module-reports/modules/user/public/translations/en/validation.yml
@@ -3,7 +3,7 @@ en:
email:
required: Please provide your email address
format: The email doesn't look right, please check again
- user_exists: It seems you already have a registered account. Please check the email field again or
sign in with your credentials.
+ user_exists: It seems you already have a registered account. Please check the email field again or
log in with your credentials.
taken: already taken
not_uniq: not unique
invalid_email_or_password: Invalid email or password
diff --git a/pos-module-reports/modules/user/public/views/pages/authentication_links/create.liquid b/pos-module-reports/modules/user/public/views/pages/authentication_links/create.liquid
index 2083015..e3cbde9 100644
--- a/pos-module-reports/modules/user/public/views/pages/authentication_links/create.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/authentication_links/create.liquid
@@ -12,12 +12,12 @@ slug: authentication_links
break
endif
- function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.created'
+ function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.created', error: null, force_clear: null, info: null
redirect_to '/'
else
log email.errors, type: 'ERROR: authentication_links/create email'
- function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.something_went_wrong'
+ function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.something_went_wrong', error: null, force_clear: null, info: null
redirect_to '/'
endif
elsif object.token == blank
@@ -25,9 +25,9 @@ slug: authentication_links
log object, type: 'DEBUG: reset-password-user-not-found'
endif
- function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.created'
+ function _ = 'modules/user/helpers/flash', notice: 'modules/user/authentication_links.created', error: null, force_clear: null, info: null
redirect_to '/'
else
- theme_render_rc 'passwords/reset', context: context, errors: object.errors
+ render 'modules/user/passwords/reset', context: context, errors: object.errors, values: null
endif
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/oauth/callback.liquid b/pos-module-reports/modules/user/public/views/pages/oauth/callback.liquid
new file mode 100644
index 0000000..f7d1ac2
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/oauth/callback.liquid
@@ -0,0 +1,104 @@
+---
+method: get
+slug: oauth/:provider/callback
+---
+{% liquid
+ # platformos-check-disable ConvertIncludeToRender
+
+ function current_user = "modules/user/queries/user/current"
+ assign state = context.session.state
+ if context.params.code == blank or context.params.provider == blank or context.params.state != state
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', error: "modules/user/oauth.app.invalid_request", default: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ endif
+
+ function available_providers = "modules/user/helpers/get_available_oauth_providers"
+ assign provider = context.params.provider | upcase
+ assign selected_provider = available_providers[provider]
+
+ if selected_provider == blank
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ endif
+
+ # check if user already has a given provider
+ if current_user.id != blank
+ graphql g = "modules/user/oauth/find_by_user_id", provider: provider, user_id: current_user.id
+ if g.records.total_entries > 0
+ log "Provider already assigned", type: "ERROR"
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.provider_already_assigned", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ endif
+ endif
+
+ # fetch user info using the appropriate module
+ assign command_path = "modules/oauth_" | append: selected_provider.key | append: "/helpers/get_user_info"
+ function user_info = command_path, provider: selected_provider, code: context.params.code
+
+ if user_info.valid == false
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.user_info_error", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ endif
+
+ assign user_sub = user_info.sub | json
+ assign user_email = user_info.email
+ assign user_first_name = user_info.first_name
+ assign user_last_name = user_info.last_name
+
+ # check if sub is already registered to an existing user
+ graphql g = "modules/user/oauth/find_by_sub", provider: provider, sub: user_sub
+ assign found_user_id = current_user.id
+ assign create_provider_assignment = true
+ if g.records.total_entries > 0
+ if current_user.id != null
+ log "Sub already assigned", type: "ERROR"
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.sub_already_assigned", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ else
+ assign found_user_id = g.records.results[0].user_id
+ assign create_provider_assignment = false
+ endif
+ endif
+
+ # check if user account should be created
+ if current_user.id == null and found_user_id == null
+ function new_user = "modules/user/commands/oauth/create_user", user_first_name: user_first_name, user_last_name: user_last_name, user_email: user_email
+ if new_user == null or new_user.valid == false
+ log new_user.errors, type: "ERROR"
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.failed_to_create_account", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ return
+ endif
+ assign found_user_id = new_user.id
+ endif
+
+ # create a connection between user and provider
+ if create_provider_assignment
+ graphql g = "modules/user/oauth/create", sub: user_sub, provider: provider, user_id: found_user_id
+ endif
+
+ # sign in as user
+ if current_user.id == blank
+ function _ = "modules/user/commands/session/create", validate_password: false, skip_otp: true, email: null, password: null, hook_params: null, user_id: null
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.signed_in", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ else
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', notice: "modules/user/oauth.app.assigned_provider", default: null, error: null, format: null, info: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ endif
+ # platformos-check-enable ConvertIncludeToRender
+%}
+
diff --git a/pos-module-reports/modules/user/public/views/pages/oauth/start.liquid b/pos-module-reports/modules/user/public/views/pages/oauth/start.liquid
new file mode 100644
index 0000000..9356a65
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/oauth/start.liquid
@@ -0,0 +1,27 @@
+---
+method: post
+slug: oauth/:provider/start
+---
+
+{% liquid
+ if context.params.provider == blank
+ log "Provider not provided", type: "ERROR"
+ redirect_to '/'
+ endif
+
+ function available_providers = 'modules/user/helpers/get_available_oauth_providers'
+ assign provider = context.params.provider | upcase
+ assign selected_provider = available_providers[provider]
+
+ if selected_provider == blank
+ assign error = "Provider does not exist: " | append: provider
+ log error, type: "ERROR"
+ redirect_to '/'
+ endif
+
+ session state = '' | uuid
+
+ assign command_path = "modules/oauth_" | append: selected_provider.key | append: "/helpers/get_redirect_url"
+ function url = command_path, provider: selected_provider, state: context.session.state
+ redirect_to url
+%}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/pages/oauth/unassign.liquid b/pos-module-reports/modules/user/public/views/pages/oauth/unassign.liquid
new file mode 100644
index 0000000..de60914
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/oauth/unassign.liquid
@@ -0,0 +1,21 @@
+---
+slug: oauth/:provider/unassign
+method: delete
+---
+{% liquid
+ function current_user = 'modules/user/queries/user/current'
+
+ if context.params.provider == blank or current_user.id == blank
+ redirect_to '/'
+ endif
+
+ assign provider = context.params.provider | upcase
+
+ graphql g = 'modules/user/oauth/find_by_user_id', provider: provider, user_id: current_user.id
+ if g.records.total_entries > 0
+ graphql g = 'modules/user/oauth/delete', id: g.records.results[0].id
+ endif
+
+ function _ = 'modules/user/helpers/flash', notice: 'modules/user/oauth.app.unassigned_provider', error: null, force_clear: null, info: null
+ redirect_to '/'
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/passwords/create.liquid b/pos-module-reports/modules/user/public/views/pages/passwords/create.liquid
index 97d2e78..5253150 100644
--- a/pos-module-reports/modules/user/public/views/pages/passwords/create.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/passwords/create.liquid
@@ -5,15 +5,15 @@ method: post
{% liquid
assign input = context.params.password
assign redirect_url = context.params.redirect_to | default: '/'
- hash_assign input['user_id'] = context.session.reset_password_session_user_id
+ assign input.user_id = context.session.reset_password_session_user_id
function object = 'modules/user/commands/passwords/create', object: input
if object.valid
session reset_password_session_user_id = null
- function _ = 'modules/user/commands/session/create', user_id: object.id, validate_password: false, email: null, password: null, hook_params: null
+ function _ = 'modules/user/commands/session/create', validate_password: false, email: null, password: null, hook_params: null, skip_otp: null, user_id: context.session.reset_password_session_user_id
redirect_to redirect_url
else
- theme_render_rc 'passwords/new', context: context, errors: object.errors
+ render 'modules/user/passwords/new', context: context, errors: object.errors
endif
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/passwords/new.liquid b/pos-module-reports/modules/user/public/views/pages/passwords/new.liquid
index 84bf5a7..66d8958 100644
--- a/pos-module-reports/modules/user/public/views/pages/passwords/new.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/passwords/new.liquid
@@ -5,11 +5,11 @@
if user
session reset_password_session_user_id = user.id
else
- function _ = 'modules/user/helpers/flash', error: 'modules/user/passwords.expired_link'
+ function _ = 'modules/user/helpers/flash', error: 'modules/user/passwords.expired_link', force_clear: null, info: null, notice: null
redirect_to '/sessions/new'
break
endif
endif
- theme_render_rc 'passwords/new', context: context
+ render 'modules/user/passwords/new', context: context, errors: null
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/passwords/reset.liquid b/pos-module-reports/modules/user/public/views/pages/passwords/reset.liquid
index 521b6b0..ac95321 100644
--- a/pos-module-reports/modules/user/public/views/pages/passwords/reset.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/passwords/reset.liquid
@@ -1 +1 @@
-{% theme_render_rc 'passwords/reset', context: context %}
+{% render 'modules/user/passwords/reset', context: context, values: null, errors: null %}
diff --git a/pos-module-reports/modules/user/public/views/pages/profiles/2fa/create.liquid b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/create.liquid
new file mode 100644
index 0000000..3ec7f61
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/create.liquid
@@ -0,0 +1,26 @@
+---
+slug: profiles/2fa
+method: post
+---
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.id == blank
+ redirect_to '/'
+ endif
+
+ function object = 'modules/user/commands/user/verify_otp', object: context.params.2fa, email: current_profile.user.email
+ if object.valid
+ assign current_profile.otp_configured = true
+ function object = 'modules/user/commands/profiles/mark_otp', object: current_profile
+ if object.valid != true
+ log object, 'ERROR: modules/user/profiles/mark_otp'
+ endif
+ assign notice = 'modules/user/2fa.create.success' | t
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', url: '/', notice: notice, default: null, error: null, format: null, info: null, object: null
+ # platformos-check-enable DeprecatedTag
+ else
+ function user_otp = 'modules/user/queries/user/otp', email: current_profile.user.email, name: null
+ render 'modules/user/2fa/setup', otp: user_otp.otp, errors: object.errors, object: object
+ endif
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/profiles/2fa/delete.liquid b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/delete.liquid
new file mode 100644
index 0000000..7552075
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/delete.liquid
@@ -0,0 +1,25 @@
+---
+slug: profiles/2fa/delete
+method: post
+---
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.id == blank
+ redirect_to '/'
+ endif
+
+ function object = 'modules/user/commands/user/verify_otp', object: context.params.2fa, email: current_profile.user.email
+ if object.valid
+ assign current_profile.otp_configured = false
+ function object = 'modules/user/commands/profiles/mark_otp', object: current_profile
+ if object.valid != true
+ log object, 'ERROR: modules/user/profiles/mark_otp'
+ endif
+ assign notice = 'modules/user/2fa.delete.success' | t
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', url: '/', notice: notice, default: null, error: null, format: null, info: null, object: null
+ # platformos-check-enable DeprecatedTag
+ else
+ render 'modules/user/2fa/disable', errors: object.errors
+ endif
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/profiles/2fa/disable.liquid b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/disable.liquid
new file mode 100644
index 0000000..0ef75da
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/disable.liquid
@@ -0,0 +1,8 @@
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.user.id == null or current_profile.otp_configured != true
+ redirect_to '/'
+ endif
+
+ render 'modules/user/2fa/disable', errors: null
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/profiles/2fa/new.liquid b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/new.liquid
new file mode 100644
index 0000000..70c73db
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/profiles/2fa/new.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.user.id == null
+ redirect_to '/'
+ endif
+
+ function user_otp = 'modules/user/queries/user/otp', email: current_profile.user.email, name: null
+
+ render 'modules/user/2fa/setup', otp: user_otp.otp, object: null, errors: null
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/2fa.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/2fa.liquid
new file mode 100644
index 0000000..7e16d76
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/2fa.liquid
@@ -0,0 +1,29 @@
+---
+method: post
+---
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.user != null
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ endif
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'sessions.create', return_url: '/', access_callback: null, entity: null
+ # platformos-check-enable DeprecatedTag
+
+ function object = 'modules/user/commands/user/verify_otp', object: context.params.2fa, email: null
+ if object.valid
+ function res = 'modules/user/commands/session/create', email: object.email, password: object.password, hook_params: context.params, skip_otp: true, validate_password: null, user_id: null
+ if res.valid
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ else
+ render 'modules/user/sessions/new', context: context, errors: res.errors, values: null
+ endif
+ else
+ render 'modules/user/2fa/verify', object: object
+ endif
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/create.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/create.liquid
index 645c1de..24f3707 100644
--- a/pos-module-reports/modules/user/public/views/pages/sessions/create.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/create.liquid
@@ -3,16 +3,19 @@ method: post
slug: sessions
---
{% liquid
- function current_user = 'modules/user/queries/user/current'
- # platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_redirect', requester: current_user, do: 'sessions.create', return_url: '/'
- # platformos-check-enable UnreachableCode
+ function current_profile = 'modules/user/helpers/current_profile'
- function res = 'modules/user/commands/session/create', email: context.params.email, password: context.params.password, hook_params: context.params, validate_password: true
-
- if res.valid
- include 'modules/core/helpers/redirect_to'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'sessions.create', return_url: '/', access_callback: null, entity: null
+ # platformos-check-enable DeprecatedTag
+ function res = 'modules/user/commands/session/create', email: context.params.email, password: context.params.password, hook_params: context.params, validate_password: true, skip_otp: null, user_id: null
+ if res.valid and res.otp_required
+ render 'modules/user/2fa/verify', object: context.params
+ elsif res.valid
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
else
- theme_render_rc 'sessions/new', context: context, errors: res.errors
+ render 'modules/user/sessions/new', context: context, errors: res.errors, values: null
endif
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/destroy.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/destroy.liquid
index 509e844..563bb06 100644
--- a/pos-module-reports/modules/user/public/views/pages/sessions/destroy.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/destroy.liquid
@@ -3,12 +3,14 @@ slug: sessions
method: delete
---
{% liquid
- function current_user = 'modules/user/queries/user/current'
- # platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_redirect', requester: current_user, do: 'sessions.destroy', return_url: '/'
- # platformos-check-enable UnreachableCode
+ function current_profile = 'modules/user/helpers/current_profile'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'sessions.destroy', return_url: '/', access_callback: null, entity: null
+ # platformos-check-enable DeprecatedTag
+
function res = 'modules/user/commands/session/destroy'
- assign redirect_path = res.hook_results.redirect_to | default: params.redirect_to | default: '/'
+
+ assign redirect_path = res.hook_results.redirect_to | default: context.params.redirect_to | default: '/'
redirect_to redirect_path
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/create.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/create.liquid
index 9e1bb25..d50500a 100644
--- a/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/create.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/create.liquid
@@ -1,9 +1,9 @@
---
-slug: sessions/impersonations/:user_id
+slug: sessions/impersonations
method: post
---
{% liquid
- function current_user = 'modules/user/queries/user/current'
+ function current_profile = 'modules/user/helpers/current_profile'
function user_to_impersonate = 'modules/user/queries/user/load', id: context.params.user_id
if user_to_impersonate
@@ -14,13 +14,17 @@ method: post
endif
# platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_unauthorized', do: permission, requester: current_user
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_unauthorized', do: permission, requester: current_profile, access_callback: null, anonymous_return_to: null, entity: null, forbidden_partial: null, redirect_anonymous_to_login: null
+ # platformos-check-enable DeprecatedTag
# platformos-check-enable UnreachableCode
function impersonate_user = 'modules/user/commands/session/impersonation/create', current_user_id: context.current_user.id, user: user_to_impersonate
if impersonate_user.valid
- include 'modules/core/helpers/redirect_to'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
else
print "Something went wrong."
endif
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/destroy.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/destroy.liquid
index 14d2bc9..85bfbb6 100644
--- a/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/destroy.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/impersonation/destroy.liquid
@@ -10,7 +10,9 @@ method: delete
function object = 'modules/user/commands/session/impersonation/destroy', user: admin_user, current_user_id: context.current_user.id
if object.valid
- include 'modules/core/helpers/redirect_to'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
else
print "Something went wrong."
endif
diff --git a/pos-module-reports/modules/user/public/views/pages/sessions/new.liquid b/pos-module-reports/modules/user/public/views/pages/sessions/new.liquid
index d15a652..9b47024 100644
--- a/pos-module-reports/modules/user/public/views/pages/sessions/new.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/sessions/new.liquid
@@ -1,8 +1,9 @@
{% liquid
- function current_user = 'modules/user/queries/user/current'
- # platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_redirect', requester: current_user, do: 'sessions.create', return_url: '/'
- # platformos-check-enable UnreachableCode
+ function current_profile = 'modules/user/helpers/current_profile'
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'sessions.create', return_url: '/', access_callback: null, entity: null
+ # platformos-check-enable DeprecatedTag
- theme_render_rc 'sessions/new', context: context
+ render 'modules/user/sessions/new', context: context, values: null, errors: null
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/users/create.liquid b/pos-module-reports/modules/user/public/views/pages/users/create.liquid
index a1b9adf..9d00033 100644
--- a/pos-module-reports/modules/user/public/views/pages/users/create.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/users/create.liquid
@@ -3,22 +3,23 @@ method: post
slug: users
---
{% liquid
- function current_user = 'modules/user/queries/user/current'
+ function current_profile = 'modules/user/helpers/current_profile'
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'users.register', access_callback: null, entity: null, return_url: null
+ # platformos-check-enable DeprecatedTag
- # platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_redirect', requester: current_user, do: 'users.register', redirect_url: "/"
- # platformos-check-enable UnreachableCode
-
- function object = 'modules/user/commands/user/create', email: params.email, password: params.password, hook_params: params, roles: null
+ function object = 'modules/user/commands/user/create', first_name: context.params.first_name, last_name: context.params.last_name, email: context.params.email, password: context.params.password, hook_params: context.params, roles: null
if object.valid
- function _ = 'modules/user/commands/session/create', user_id: object.id, validate_password: false, email: null, password: null, hook_params: null
- include 'modules/core/helpers/redirect_to'
+ function _ = 'modules/user/commands/session/create', validate_password: false, user_id: object.id, email: null, password: null, hook_params: null, skip_otp: null
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
else
- assign values = object | default: null | hash_merge: password: ''
-
function registration_fields = 'modules/user/queries/registration_fields/load'
- assign values = params | hash_merge: password: ''
- theme_render_rc 'users/new', context: context, registration_fields: registration_fields, errors: object.errors, values: values
+ assign values = context.params
+ assign values.password = ''
+ render 'modules/user/users/new', context: context, registration_fields: registration_fields, errors: object.errors, values: values
endif
%}
diff --git a/pos-module-reports/modules/user/public/views/pages/users/email/edit.liquid b/pos-module-reports/modules/user/public/views/pages/users/email/edit.liquid
new file mode 100644
index 0000000..9705fbf
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/users/email/edit.liquid
@@ -0,0 +1,10 @@
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.user == null
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ endif
+
+ render 'modules/user/users/email/edit', context: context, otp_enabled: current_profile.otp_configured, errors: null
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/users/email/update.liquid b/pos-module-reports/modules/user/public/views/pages/users/email/update.liquid
new file mode 100644
index 0000000..1b4b258
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/pages/users/email/update.liquid
@@ -0,0 +1,35 @@
+---
+slug: users/email/edit
+method: put
+---
+{% liquid
+ function current_profile = 'modules/user/helpers/current_profile'
+ if current_profile.user == null
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', default: null, error: null, format: null, info: null, notice: null, object: null, url: null
+ # platformos-check-enable DeprecatedTag
+ endif
+
+ if current_profile.otp_configured
+ function object = 'modules/user/commands/user/verify_otp', object: context.params.user, email: current_profile.user.email
+ if object.valid == false
+ render 'modules/user/users/email/edit', context: null, otp_enabled: current_profile.otp_configured, errors: object.errors
+ break
+ endif
+ endif
+
+ function object = 'modules/user/commands/user/email_update', object: context.params.user, current_user: current_profile.user
+ if object.valid
+ assign current_profile.email = context.params.user.email
+ function _ = 'modules/user/commands/profiles/update', object: current_profile, profile: current_profile
+ assign event_payload = {"actor_id": object.id, "object": object, "actor": object, "target": null, "object_id": null, "target_id": null}
+ function _event = 'modules/core/commands/events/publish', type: 'email_updated', object: event_payload, delay: null, max_attempts: null
+
+ assign notice = 'modules/user/users.email.change_success' | t
+ # platformos-check-disable DeprecatedTag
+ include 'modules/core/helpers/redirect_to', url: '/', notice: notice, default: null, error: null, format: null, info: null, object: null
+ # platformos-check-enable DeprecatedTag
+ else
+ render 'modules/user/users/email/edit', context: context, otp_enabled: null, errors: null
+ endif
+%}
diff --git a/pos-module-reports/modules/user/public/views/pages/users/new.liquid b/pos-module-reports/modules/user/public/views/pages/users/new.liquid
index 1bf8d09..22d0a47 100644
--- a/pos-module-reports/modules/user/public/views/pages/users/new.liquid
+++ b/pos-module-reports/modules/user/public/views/pages/users/new.liquid
@@ -1,11 +1,12 @@
{% liquid
- function current_user = 'modules/user/queries/user/current'
- # platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_redirect', requester: current_user, do: 'users.register', redirect_url: "/"
- # platformos-check-enable UnreachableCode
+ function current_profile = 'modules/user/helpers/current_profile'
+
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_redirect', requester: current_profile, do: 'users.register', access_callback: null, entity: null, return_url: null
+ # platformos-check-enable DeprecatedTag
function registration_fields = 'modules/user/queries/registration_fields/load'
- assign values = null | hash_merge: email: context.params.email
+ assign values = {"email": context.params.email}
- theme_render_rc 'users/new', context: context, registration_fields: registration_fields, values: values
+ render 'modules/user/users/new', context: context, registration_fields: registration_fields, values: values, errors: null
%}
diff --git a/pos-module-reports/modules/user/public/views/partials/2fa/disable.liquid b/pos-module-reports/modules/user/public/views/partials/2fa/disable.liquid
new file mode 100644
index 0000000..839b71c
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/2fa/disable.liquid
@@ -0,0 +1,35 @@
+{% doc %}
+ @param {object} errors - The validation errors object
+{% enddoc %}
+
+
+ {{ 'modules/user/2fa.disable.two_factor_authentication' | t }}
+
+
+
+
diff --git a/pos-module-reports/modules/user/public/views/partials/2fa/setup.liquid b/pos-module-reports/modules/user/public/views/partials/2fa/setup.liquid
new file mode 100644
index 0000000..20974cc
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/2fa/setup.liquid
@@ -0,0 +1,54 @@
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {object} object - The object to process
+ @param {object} otp - The OTP configuration object
+{% enddoc %}
+
+
+ {{ 'modules/user/2fa.new.two_factor_authentication' | t }}
+
+
+
+
diff --git a/pos-module-reports/modules/user/public/views/partials/2fa/verify.liquid b/pos-module-reports/modules/user/public/views/partials/2fa/verify.liquid
new file mode 100644
index 0000000..0a03db8
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/2fa/verify.liquid
@@ -0,0 +1,33 @@
+{% doc %}
+ @param {object} object - The object to process
+{% enddoc %}
+
+
+ {{ 'modules/user/2fa.new.two_factor_authentication' | t }}
+
+
+
+
diff --git a/pos-module-reports/modules/user/public/views/partials/admin_pages/list.liquid b/pos-module-reports/modules/user/public/views/partials/admin_pages/list.liquid
index 61021c0..3fd9b14 100644
--- a/pos-module-reports/modules/user/public/views/partials/admin_pages/list.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/admin_pages/list.liquid
@@ -1,7 +1,7 @@
{% function users = 'modules/user/queries/user/get_all' %}
- {% theme_render_rc 'components/atoms/heading', content: 'Users', level: 2, classes: 'pb-8' %}
+
Users >
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/button.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/button.liquid
deleted file mode 100644
index 31e96ef..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/button.liquid
+++ /dev/null
@@ -1,101 +0,0 @@
----
-metadata:
- name: Button
- params:
- tag:
- - button
- - a
- classes: ''
- weight:
- - primary
- - secondary
- variant:
- - normal
- - important
- - confirmation
- - inverted
- filled:
- - false
- - true
- size:
- - normal
- - small
- disabled:
- - false
- - true
- attributes: {}
- href: ''
- content: Click me
- type: 'button'
----
-{% liquid
- assign tag = tag | default: params.tag | default: 'button'
- assign type = type | default: params.type | default: 'button'
- assign weight = weight | default: params.weight | default: 'primary'
- assign variant = variant | default: params.variant | default: 'normal'
- assign filled = filled | default: params.filled | default: false
- assign size = size | default: params.size | default: 'normal'
- assign disabled = disabled | default: params.disabled | default: false
- assign attributes = attributes | default: params.attributes
- assign content = content | default: params.content
- assign href = href | default: params.href
- if href != blank
- assign tag = 'a'
- endif
-
- assign classes = classes | default: params.classes | append: ' inline-flex items-center justify-center gap-3 rounded-button whitespace-nowrap transition-colors disabled:opacity-30 disabled:pointer-events-none'
- if tag == 'a'
- assign classes = classes | prepend: 'pos-clean '
- endif
- if disabled
- assign classes = classes | prepend: 'opacity-30 pointer-events-none '
- endif
-
- if weight == 'primary'
- assign classes = classes | append: ' border'
- case variant
- when 'normal'
- assign classes = classes | append: ' border-button-primary-stroke hover:border-button-primary-stroke-hover bg-button-primary hover:bg-button-primary-hover text-button-primary-foreground hover:text-button-primary-hover-foreground'
- when 'inverted'
- assign classes = classes | append: ' border-button-primary-foreground bg-button-primary-foreground text-button-primary hover:text-button-primary-hover'
- when 'important'
- assign classes = classes | append: ' border-important hover:border-important-hover bg-important hover:bg-important-hover text-button-primary-foreground hover:text-button-primary-hover-foreground'
- when 'confirmation'
- assign classes = classes | append: ' border-confirmation hover:border-confirmation-hover bg-confirmation hover:bg-confirmation-hover text-button-primary-foreground hover:text-button-primary-hover-foreground'
- endcase
-
- elsif weight == 'secondary'
- assign classes = classes | append: ' border-secondary'
- case variant
- when 'normal'
- assign classes = classes | append: ' border-button-secondary-stroke hover:border-button-secondary-stroke-hover text-button-secondary-foreground hover:text-button-secondary-foreground-hover'
- when 'inverted'
- assign classes = classes | append: ' border-inverted text-inverted'
- when 'important'
- assign classes = classes | append: ' border-important hover:border-important-hover text-important hover:text-important-hover'
- when 'confirmation'
- assign classes = classes | append: ' border-confirmation hover:border-confirmation-hover text-confirmation hover:text-confirmation-hover'
- endcase
-
- if filled
- assign classes = classes | append: ' bg-button-secondary-background'
- endif
- endif
-
-
- if size == 'small'
- assign classes = classes | prepend: 'h-7 px-4 py-1 text-sm leading-[1.43] '
- else
- assign classes = classes | prepend: 'h-11 px-4 py-2.5 leading-tight '
- endif
-%}
-<{{ tag }}
- class="{{ classes }}"
- {% for attribute in attributes %}
- {{ attribute[0] | html_safe }}="{{ attribute[1] | html_safe }}"
- {% endfor %}
- {% if href and disabled != true %}href="{{href}}"{% endif %}
- {% if tag == 'button' and disabled %}disabled{% endif %}
- {% if tag == 'button' %}type="{{type}}"{% endif %}
->{{ content | html_safe }}{{ tag }}>
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/card.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/card.liquid
deleted file mode 100644
index d76565f..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/card.liquid
+++ /dev/null
@@ -1,34 +0,0 @@
----
-metadata:
- name: Card
- params:
- tag: "div"
- classes: ''
- variant:
- - default
- - highlighted
- content: This is an example card
----
-{% liquid
- assign tag = tag | default: params.tag | default: 'div'
- assign variant = variant | default: params.variant | default: 'default'
- assign content = content | default: params.content
- assign classes = classes | default: params.classes
- assign attributes = attributes | default: params.attributes
-
- assign classes = 'p-6 rounded-surface shadow-card ' | append: classes
-
- if variant == 'highlighted'
- assign classes = classes | append: ' bg-highlighted'
- else
- assign classes = classes | append: ' bg-panel'
- endif
-%}
-<{{ tag }}
- {% for attribute in attributes %}
- {{ attribute[0] | html_safe }}="{{ attribute[1] | html_safe }}"
- {% endfor %}
- class="{{ classes }}"
->
- {% print content %}
-{{ tag }}>
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/heading.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/heading.liquid
deleted file mode 100644
index 0cde244..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/heading.liquid
+++ /dev/null
@@ -1,47 +0,0 @@
----
-metadata:
- name: Heading
- params:
- tag: ''
- level:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- classes: ''
- content: I'm a heading
----
-{% liquid
- assign level = level | default: params.level | default: 2
- assign defaultTag = 'h' | append: level
- assign tag = tag | default: params.tag | default: defaultTag
- assign attributes = attributes | default: params.attributes
- assign content = content | default: params.content
-
- assign classes = classes | default: params.classes | append: ' font-bold'
-
-
- if level == 1
- assign classes = classes | append: ' text-5xl'
- elsif level == 2
- assign classes = classes | append: ' text-3xl'
- elsif level == 3
- assign classes = classes | append: ' text-2xl'
- elsif level == 4
- assign classes = classes | append: ' text-xl'
- elsif level == 5
- assign classes = classes | append: ' text-xl'
- elsif level == 6
- assign classes = classes | append: ' text-xl'
- endif
-%}
-<{{ tag }}
- class="{{ classes }}"
- {% for attribute in attributes %}
- {{ attribute[0] }}="{{ attribute[1] }}"
- {% endfor %}
->{% print content %}{{ tag }}>
-
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/icon.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/icon.liquid
deleted file mode 100644
index 2c6368e..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/icon.liquid
+++ /dev/null
@@ -1,26 +0,0 @@
----
-metadata:
- name: Icon
- params:
- name:
- - plus
- - checkCircle
- - ...
- class: 'w-4 h-4'
- styleguide:
- - name: 'all'
- class: 'w-10 h-10 p-2 m-2 inline-block'
----
-{% liquid
- assign name = name | default: params.name
- assign class = class | default: params.class
-%}
-{% comment %}
-
- List of icons in SVG format
-
- Params:
- - icon name (string)
- - class (string, optional)
-
-{% endcomment %}
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/input.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/input.liquid
deleted file mode 100644
index 3ca3100..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/input.liquid
+++ /dev/null
@@ -1,83 +0,0 @@
----
-metadata:
- name: Input
- params:
- variant:
- - normal
- - confirmation
- - error
- type:
- - text
- - textarea
- - email
- - password
- - search
- - tel
- - date
- - number
- - hidden
- name: my-input
- placeholder: Type here
- value: ''
- required:
- - false
- - true
- disabled:
- - false
- - true
- classes: ''
- attributes: {}
----
-{% liquid
- assign variant = variant | default: params.variant | default: 'normal'
- assign type = type | default: params.type | default: 'text'
- assign name = name | default: params.name
- assign value = value | default: params.value | default: ''
- assign required = required | default: params.required | default: false
- assign disabled = disabled | default: params.disabled | default: false
- assign placeholder = placeholder | default: params.placeholder
- assign id = id | default: params.attributes.id | default: name
- assign attributes = attributes | default: params.attributes
- assign original_classes = classes | default: params.classes
- assign classes = 'w-full py-[0.69em] px-[0.44em] inline-block border rounded-input focus:border-interactive-hover bg-input disabled:opacity-40 outline-none text-input-foreground leading-tight transition-colors ' | append: original_classes
-
- case variant
- when 'confirmation'
- assign classes = classes | append: ' border-confirmation'
- when 'error'
- assign classes = classes | append: ' border-important'
- else
- assign classes = classes | append: ' border-input-border'
- endcase
-%}
-
-{% if type == 'hcaptcha' %}
-
-
-{% else %}
-
- {% if type == 'textarea' %}
-
- {% endif %}
-{% endif %}
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/atoms/sidenote.liquid b/pos-module-reports/modules/user/public/views/partials/components/atoms/sidenote.liquid
deleted file mode 100644
index a5d3b7f..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/atoms/sidenote.liquid
+++ /dev/null
@@ -1,24 +0,0 @@
----
-metadata:
- name: Sidenote
- params:
- classes: ''
- content: I'm a sidenote
- styleguide:
- - content: I'm a sidenote
-
----
-{% liquid
- assign attributes = attributes | default: params.attributes
- assign content = content | default: params.content
- assign classes = classes | default: params.classes | append: ' text-xs text-supplementary'
-%}
-
- {% print content %}
-
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/molecules/formfield.liquid b/pos-module-reports/modules/user/public/views/partials/components/molecules/formfield.liquid
deleted file mode 100644
index 75e4b2f..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/molecules/formfield.liquid
+++ /dev/null
@@ -1,136 +0,0 @@
----
-metadata:
- name: Formfield
- params:
- tag: 'fieldset'
- classes: ''
- validation:
- passed:
- - true
- - false
- messages: []
- input_params:
- name: 'text-input-with-label-example'
- placeholder: Type here
- type:
- - text
- - textarea
- - email
- - password
- - search
- - tel
- - date
- - number
- - hidden
- - select
- - hcaptcha
- label_params:
- content: Text input with label
- description_params:
- content: This is a description
- icon: This is the icon name
- multiple:
- - true
- - false
- options:
- - label: Option 1
- value: value1
- - label: Option 2
- value: value2
- styleguide:
- - tag: 'div'
- classes: ''
- validation:
- passed: false
- messages: ['This is a test error message', 'Another error message']
- input_params:
- name: 'text-input-with-label-example'
- placeholder: Type here
- label_params:
- content: Form label
- description_params:
- content: This is a FormField description
- icon: info
-
----
-{% liquid
- assign tag = tag | default: params.tag | default: 'fieldset'
- assign label_params = label_params | default: params.label_params
- assign classes = classes | default: params.classes
- assign validation = validation | default: params.validation
- assign input_params = input_params | default: params.input_params
- assign attributes = '{}' | parse_json
- assign input_attributes = input_params.attributes | default: attributes
-
- assign id = input_attributes.id | default: input_params.name
-
- hash_assign input_attributes['aria-describedby'] = '' | append: input_params.name | append: '-desc'
-
- assign input_params = input_params | hash_merge: attributes: input_attributes
- if validation.passed == false
- hash_assign input_params['variant'] = 'error'
- endif
-
- assign description_params = description_params | default: params.description_params
-%}
-<{{ tag }} class="flex flex-col items-start gap-1 {{ classes }}">
-
- {% liquid
- if input_params.type == 'checkbox'
- theme_render_rc 'components/atoms/checkbox', params: input_params
- endif
- %} {{ label_params.content | html_safe }}
- {% if input_params.required %} * {% endif %}
-
-
- {% liquid
- unless input_params.type == 'checkbox'
- if input_params.type == 'select'
-
- theme_render_rc 'components/molecules/select', params: input_params
- else
- theme_render_rc 'components/atoms/input', params: input_params
- endif
- endunless
- %}
- {% if description_params.content or validation.messages.size > 0 %}
-
- {% endif %}
-
-{{ tag }}>
diff --git a/pos-module-reports/modules/user/public/views/partials/components/molecules/hcaptcha.liquid b/pos-module-reports/modules/user/public/views/partials/components/molecules/hcaptcha.liquid
deleted file mode 100644
index d0500c8..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/molecules/hcaptcha.liquid
+++ /dev/null
@@ -1,12 +0,0 @@
-{% if context.constants.VERIFY_HCAPTCHA == "true" %}
-
-
-
-
- {% #render 'theme/simple/field_error', errors: object.errors.hcaptcha %}
-
-{% elsif context.environment == 'staging' %}
-
-
-
-{% endif %}
diff --git a/pos-module-reports/modules/user/public/views/partials/components/molecules/pagetitle.liquid b/pos-module-reports/modules/user/public/views/partials/components/molecules/pagetitle.liquid
deleted file mode 100644
index dd7c982..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/molecules/pagetitle.liquid
+++ /dev/null
@@ -1,13 +0,0 @@
----
-metadata:
- name: Pagetitle
- params:
- content: 'Page title'
- classes: 'text-center'
----
-{% assign content = content | default: params.content %}
-{% assign classes = classes | default: params.classes %}
-{% assign classes = classes | prepend: 'container ' | strip %}
-
- {% theme_render_rc 'components/atoms/heading', level: 1, content: content, classes: classes %}
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/organisms/login.liquid b/pos-module-reports/modules/user/public/views/partials/components/organisms/login.liquid
deleted file mode 100644
index 9d09132..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/organisms/login.liquid
+++ /dev/null
@@ -1,66 +0,0 @@
----
-metadata:
- name: login form
- params:
- action: ''
- method: 'POST'
- redirect_to: '/'
- classes: ''
- errors:
- email:
- - Error message
- values:
- email: "random@example.com"
- email_placeholder: ''
- submit: 'Submit'
----
-{% liquid
- assign action = action | default: params.action
- assign method = method | default: params.method | default: 'POST'
- assign errors = errors | default: errors
- assign redirect_to = redirect_to | default: params.redirect_to | default: '/'
- assign footer = footer | default: params.footer
- assign classes = classes | default: params.classes
- assign email_placeholder = email_placeholder | default: params.email_placeholder
- assign submit = submit | default: params.submit
- assign default_submit = 'modules/user/passwords.login' | t
- assign submit = submit | default: default_submit
-%}
-
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/organisms/new-password.liquid b/pos-module-reports/modules/user/public/views/partials/components/organisms/new-password.liquid
deleted file mode 100644
index f6c1ad2..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/organisms/new-password.liquid
+++ /dev/null
@@ -1,62 +0,0 @@
----
-metadata:
- name: New password form
- params:
- context: {}
- action: '/passwords'
- redirect_to: '/'
- errors: {}
- values: {}
- submit: 'Submit'
----
-{% liquid
- assign context = context | default: params.context
- assign action = action | default: params.action
- assign redirect_to = redirect_to | default: params.redirect_to
- assign errors = errors | default: params.errors
- assign values = values | default: params.values
- assign classes = classes | default: params.classes
- assign submit = submit | default: params.submit
- assign default_submit = 'modules/user/passwords.password_update' | t
- assign submit = submit | default: default_submit
-%}
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/organisms/register.liquid b/pos-module-reports/modules/user/public/views/partials/components/organisms/register.liquid
deleted file mode 100644
index ec44cf6..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/organisms/register.liquid
+++ /dev/null
@@ -1,58 +0,0 @@
----
-metadata:
- name: register form
- params:
- action: '/users'
- method: 'POST'
- redirect_to: '/'
- registration_fields: []
- errors:
- email:
- - Error message
- password:
- - Error message
- values:
- email: random@example.com
- submit: 'Submit'
- classes: ''
----
-{% liquid
- assign action = action | default: params.action
- assign method = method | default: params.method | default: 'POST'
- assign errors = errors | default: params.errors
- assign redirect_to = redirect_to | default: params.redirect_to | default: '/'
- assign registration_fields = registration_fields | default: params.registration_fields
- assign classes = classes | default: params.classes
- assign submit = submit | default: params.submit
- assign default_submit = 'modules/user/passwords.register' | t
- assign submit = submit | default: default_submit
-%}
-
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/organisms/reset-password.liquid b/pos-module-reports/modules/user/public/views/partials/components/organisms/reset-password.liquid
deleted file mode 100644
index cbb3257..0000000
--- a/pos-module-reports/modules/user/public/views/partials/components/organisms/reset-password.liquid
+++ /dev/null
@@ -1,61 +0,0 @@
----
-metadata:
- name: Reset password form
- params:
- context: {}
- action: '/authentication_links'
- redirect_to: '/'
- errors: {}
- values: {}
----
-{% liquid
- assign context = context | default: params.context
- assign action = action | default: params.action
- assign redirect_to = redirect_to | default: params.redirect_to
- assign errors = errors | default: params.errors
- assign values = values | default: params.values
- assign classes = classes | default: params.classes
- assign submit = submit | default: params.submit
- assign default_submit = 'modules/user/passwords.reset_password' | t
- assign submit = submit | default: default_submit
-%}
-
diff --git a/pos-module-reports/modules/user/public/views/partials/components/pages/403.liquid b/pos-module-reports/modules/user/public/views/partials/components/pages/403.liquid
index 5490df3..5558d8c 100644
--- a/pos-module-reports/modules/user/public/views/partials/components/pages/403.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/components/pages/403.liquid
@@ -1,6 +1,4 @@
-
-
- 403 Forbidden
- You don't have access to this page
-
-
+
+ 403 Forbidden
+ You don't have access to this page
+
diff --git a/pos-module-reports/modules/user/public/views/partials/oauth/listing.liquid b/pos-module-reports/modules/user/public/views/partials/oauth/listing.liquid
new file mode 100644
index 0000000..24e3635
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/oauth/listing.liquid
@@ -0,0 +1,48 @@
+{% liquid
+ function available_providers = 'modules/user/helpers/get_available_oauth_providers'
+ function assigned_providers = 'modules/user/helpers/get_assigned_oauth_providers'
+ %}
+
+
+
+ {% if available_providers.size == 0 %}
+ {{ 'modules/user/oauth.app.no_providers_available' | t }}
+ {% endif %}
+
+
+ {% for provider in available_providers %}
+ {% if assigned_providers contains provider[0] %}
+
+ {% else %}
+
+ {% endif %}
+ {% endfor %}
+
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/partials/oauth/providers.liquid b/pos-module-reports/modules/user/public/views/partials/oauth/providers.liquid
new file mode 100644
index 0000000..cb17726
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/oauth/providers.liquid
@@ -0,0 +1,24 @@
+{% function available_providers = 'modules/user/helpers/get_available_oauth_providers' %}
+{% if available_providers.size > 0 %}
+
+ {{ 'modules/user/sessions.new.social_login_separator' | t }}
+
+
+ {% for provider in available_providers %}
+
+ {% endfor %}
+
+{% endif %}
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/partials/passwords/new.liquid b/pos-module-reports/modules/user/public/views/partials/passwords/new.liquid
index 18fb15c..b9ccce6 100644
--- a/pos-module-reports/modules/user/public/views/partials/passwords/new.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/passwords/new.liquid
@@ -5,18 +5,39 @@ metadata:
context: {}
errors: {}
---
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {object} context - The request context
+{% enddoc %}
{% liquid
assign context = context | default: params.context
assign errors = errors | default: params.errors
- assign pageTitle = 'modules/user/passwords.edit' | t
- theme_render_rc 'components/molecules/pagetitle', content: pageTitle, classes: 'text-center'
%}
-
- {% capture pwdResetCardContent %}
- {% theme_render_rc 'components/organisms/new-password', action: '/passwords', context: context, errors: errors, classes: 'form--new-password' %}
- {% endcapture %}
+
- {% theme_render_rc 'components/atoms/card', content: pwdResetCardContent, classes: "w-full max-w-lg mx-auto" %}
+ {{ 'modules/user/passwords.edit' | t }}
+
+
+
diff --git a/pos-module-reports/modules/user/public/views/partials/passwords/reset.liquid b/pos-module-reports/modules/user/public/views/partials/passwords/reset.liquid
index 19852e1..7a8d35a 100644
--- a/pos-module-reports/modules/user/public/views/partials/passwords/reset.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/passwords/reset.liquid
@@ -4,17 +4,42 @@ metadata:
params:
context: {}
errors: []
+ values: {}
---
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {object} values - The form values object
+ @param {object} context - The request context
+{% enddoc %}
{% liquid
assign context = context | default: params.context
assign errors = errors | default: params.errors
- assign pageTitle = 'modules/user/passwords.reset_password_title' | t
- theme_render_rc 'components/molecules/pagetitle', content: pageTitle, classes: 'text-center'
%}
-{% capture pwdResetCardContent %}
- {% theme_render_rc 'components/organisms/reset-password', action: '/authentication_links', context: context, errors: errors, classes: 'form--reset-password' %}
-{% endcapture %}
-
- {% theme_render_rc 'components/atoms/card', content: pwdResetCardContent, classes: "w-full max-w-lg mx-auto" %}
-
+
+
+ {{ 'modules/user/passwords.reset_password_title' | t }}
+
+ {{ 'modules/user/passwords.email_desc' | t }}
+
+
+
+ {{ 'modules/user/passwords.remembered_password' | t }} {{ 'modules/user/sessions.new.log_in' | t }}
+
+
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/partials/sessions/new.liquid b/pos-module-reports/modules/user/public/views/partials/sessions/new.liquid
index 2b6f5e2..f74c275 100644
--- a/pos-module-reports/modules/user/public/views/partials/sessions/new.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/sessions/new.liquid
@@ -2,32 +2,50 @@
metadata:
name: Login
params:
+ context: {}
errors: []
+ values: {}
---
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {object} values - The form values object
+ @param {object} context - The request context
+{% enddoc %}
{% liquid
assign errors = errors | default: params.errors
-
- theme_render_rc 'components/molecules/pagetitle', content: 'Login', classes: 'text-center'
%}
-{% capture loginCardContent %}
- {% theme_render_rc 'components/organisms/login', action: '/sessions', register_page_url: '/sign-up' errors: errors, classes: 'form--login', email_placeholder: 'Type', submit: 'Log in' %}
-
- Don't have an account?
-
- Request to join
-
- {% # theme_render_rc 'components/atoms/button', content: 'Register', href: '/users/new', tag: 'a' %}
-
-
- Password lost?
-
- Reset
-
- {% # theme_render_rc 'components/atoms/button', content: 'Register', href: '/users/new', tag: 'a' %}
-
-{% endcapture %}
-
-
- {% theme_render_rc 'components/atoms/card', content: loginCardContent, classes: "w-full max-w-lg mx-auto" %}
-
+
+
+ {{ 'modules/user/sessions.new.log_in' | t }}
+
+
+
+ {{ 'modules/user/sessions.new.dont_have_account' | t }} {{ 'modules/user/sessions.new.request_to_join' | t }}
+
+ {% render 'modules/user/oauth/providers' %}
+
+
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/partials/users/email/edit.liquid b/pos-module-reports/modules/user/public/views/partials/users/email/edit.liquid
new file mode 100644
index 0000000..6ff810f
--- /dev/null
+++ b/pos-module-reports/modules/user/public/views/partials/users/email/edit.liquid
@@ -0,0 +1,56 @@
+---
+metadata:
+ name: New password
+ params:
+ context: {}
+ errors: {}
+ otp_enabled: null
+---
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {boolean} otp_enabled - Whether OTP is enabled for the user
+ @param {object} context - The request context
+{% enddoc %}
+{% liquid
+ assign context = context | default: params.context
+ assign errors = errors | default: params.errors
+%}
+
+
+
+ {{ 'modules/user/users.email.change_email' | t }}
+
+
+
+
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/public/views/partials/users/new.liquid b/pos-module-reports/modules/user/public/views/partials/users/new.liquid
index db8157f..68a2def 100644
--- a/pos-module-reports/modules/user/public/views/partials/users/new.liquid
+++ b/pos-module-reports/modules/user/public/views/partials/users/new.liquid
@@ -2,23 +2,79 @@
metadata:
name: Register
params:
+ context: {}
values: {}
errors: []
registration_fields: []
---
+{% doc %}
+ @param {object} errors - The validation errors object
+ @param {string} registration_fields - Additional registration form fields
+ @param {object} values - The form values object
+ @param {object} context - The request context
+{% enddoc %}
+
{% liquid
assign values = values | default: params.values
assign errors = errors | default: params.errors
- assign values = values | default: params.values
- assign registration_fields = registration_fields | default: params.registration_fields
- assign pageTitle = 'modules/user/users.new.create_account' | t
- theme_render_rc 'components/molecules/pagetitle', content: pageTitle, classes: 'text-center'
%}
-{% capture registerCardContent %}
- {% theme_render_rc 'components/organisms/register', action: '/users', errors: errors, values: values, registration_fields: registration_fields, submit: 'SIGN UP', classes: 'form--register' %}
-{% endcapture %}
-
- {% theme_render_rc 'components/atoms/card', content: registerCardContent, classes: "w-full max-w-lg mx-auto" %}
-
+
+
+ {{ 'modules/user/users.new.create_account' | t }}
+
+
+
+ {{ 'modules/user/users.new.already_have_account' | t }}
+
+ {% render 'modules/user/oauth/providers' %}
+
\ No newline at end of file
diff --git a/pos-module-reports/modules/user/template-values.json b/pos-module-reports/modules/user/template-values.json
index 5f2dd63..a4777b0 100644
--- a/pos-module-reports/modules/user/template-values.json
+++ b/pos-module-reports/modules/user/template-values.json
@@ -2,8 +2,9 @@
"name": "User",
"machine_name": "user",
"type": "module",
- "version": "3.1.1",
+ "version": "5.2.7",
"dependencies": {
- "core": "^1.5.0"
+ "core": "^2.1.5",
+ "common-styling": "^1.11.0"
}
}
diff --git a/pos-module-reports/package.json b/pos-module-reports/package.json
index 6338db4..125c5f8 100644
--- a/pos-module-reports/package.json
+++ b/pos-module-reports/package.json
@@ -21,10 +21,6 @@
"rimraf": "^3.0.2",
"tailwindcss": "^2.2.16",
"tailwindcss-rtl": "^0.7.3",
- "testcafe": "^3.5.0",
- "testcafe-blink-diff": "^0.5.5",
- "testcafe-reporter-html": "^1.4.6",
- "testcafe-reporter-spec-time": "^4.0.0",
"webpack": "^5.69.1",
"webpack-cli": "^4.9.2",
"webpack-require-from": "^1.8.6"
diff --git a/pos-module-tests/app/lib/test/array_test.liquid b/pos-module-tests/app/lib/test/array_test.liquid
index cd12486..1116876 100644
--- a/pos-module-tests/app/lib/test/array_test.liquid
+++ b/pos-module-tests/app/lib/test/array_test.liquid
@@ -1,8 +1,11 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+{% enddoc %}
{% liquid
# Test array-related assertions
# Test array size using equal
- assign items = '["a", "b", "c"]' | parse_json
+ assign items = ["a", "b", "c"]
function contract = 'modules/tests/assertions/equal', contract: contract, given: items.size, expected: 3, field_name: 'array has 3 items'
# Test first element
diff --git a/pos-module-tests/app/lib/test/example_test.liquid b/pos-module-tests/app/lib/test/example_test.liquid
index 81c6e0e..e2c4597 100644
--- a/pos-module-tests/app/lib/test/example_test.liquid
+++ b/pos-module-tests/app/lib/test/example_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+{% enddoc %}
{% liquid
# Example test demonstrating basic assertions
@@ -12,14 +15,14 @@
# Test blank assertion
assign empty_string = ''
- function contract = 'modules/tests/assertions/blank', contract: contract, given: empty_string, field_name: 'empty string is blank'
+ assign blank_obj = { "blank_field": empty_string }
+ function contract = 'modules/tests/assertions/blank', contract: contract, object: blank_obj, field_name: 'blank_field'
# Test presence assertion - expects object with field_name key
- assign obj_with_value = '{}' | parse_json
- hash_assign obj_with_value['my_field'] = 'some value'
+ assign obj_with_value = { "my_field": 'some value' }
function contract = 'modules/tests/assertions/presence', contract: contract, object: obj_with_value, field_name: 'my_field'
# Test true assertion - expects value parameter
assign flag = true
- function contract = 'modules/tests/assertions/true', contract: contract, value: flag, field_name: 'boolean true'
+ function contract = 'modules/tests/assertions/true', contract: contract, object: null, value: flag, field_name: 'boolean true'
%}
diff --git a/pos-module-tests/app/lib/test/examples/assertions_test.liquid b/pos-module-tests/app/lib/test/examples/assertions_test.liquid
index f4065ce..8ab523d 100644
--- a/pos-module-tests/app/lib/test/examples/assertions_test.liquid
+++ b/pos-module-tests/app/lib/test/examples/assertions_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+{% enddoc %}
{% liquid
# Example test demonstrating various assertions
@@ -7,14 +10,14 @@
function contract = 'modules/tests/assertions/equal', contract: contract, given: actual_value, expected: expected_value, field_name: 'equal_strings'
# Test presence assertion
- assign user = '{ "id": "123", "name": "John" }' | parse_json
+ assign user = { "id": "123", "name": "John" }
function contract = 'modules/tests/assertions/presence', contract: contract, object: user, field_name: 'id'
# Test blank assertion
- assign result = '{ "error": null }' | parse_json
+ assign result = { "error": null }
function contract = 'modules/tests/assertions/blank', contract: contract, object: result, field_name: 'error'
# Test true assertion
- assign flags = '{ "active": true }' | parse_json
- function contract = 'modules/tests/assertions/true', contract: contract, object: flags, field_name: 'active'
+ assign flags = { "active": true }
+ function contract = 'modules/tests/assertions/true', contract: contract, object: flags, field_name: 'active', value: null
%}
diff --git a/pos-module-tests/app/lib/test/object_test.liquid b/pos-module-tests/app/lib/test/object_test.liquid
index 2966a9c..8295bfc 100644
--- a/pos-module-tests/app/lib/test/object_test.liquid
+++ b/pos-module-tests/app/lib/test/object_test.liquid
@@ -1,16 +1,19 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+{% enddoc %}
{% liquid
# Test object validation assertions
# Create a valid object
- assign valid_obj = '{"valid": true, "name": "test"}' | parse_json
+ assign valid_obj = {"valid": true, "name": "test"}
function contract = 'modules/tests/assertions/valid_object', contract: contract, object: valid_obj, field_name: 'object is valid'
# Create an invalid object
- assign invalid_obj = '{"valid": false, "errors": {"name": "is required"}}' | parse_json
+ assign invalid_obj = {"valid": false, "errors": {"name": "is required"}}
function contract = 'modules/tests/assertions/invalid_object', contract: contract, object: invalid_obj, field_name: 'object is invalid'
# Test object contains object
- assign container = '{"foo": "bar", "nested": {"a": 1, "b": 2}}' | parse_json
- assign subset = '{"foo": "bar"}' | parse_json
- function contract = 'modules/tests/assertions/object_contains_object', contract: contract, object: container, subset: subset, field_name: 'container has subset'
+ assign container = {"foo": "bar", "nested": {"a": 1, "b": 2}}
+ assign subset = {"foo": "bar"}
+ function contract = 'modules/tests/assertions/object_contains_object', contract: contract, given: container, object_contains: subset, field_name: 'container has subset'
%}
diff --git a/pos-module-tests/app/lib/test/string_test.liquid b/pos-module-tests/app/lib/test/string_test.liquid
index 8e38861..b7bd338 100644
--- a/pos-module-tests/app/lib/test/string_test.liquid
+++ b/pos-module-tests/app/lib/test/string_test.liquid
@@ -1,9 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+{% enddoc %}
{% liquid
# Test string-related assertions
# Test not_true assertion
assign flag = false
- function contract = 'modules/tests/assertions/not_true', contract: contract, value: flag, field_name: 'boolean false'
+ function contract = 'modules/tests/assertions/not_true', contract: contract, object: null, value: flag, field_name: 'boolean false'
# Test equal with strings
assign greeting = 'Hello World'
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/blank.liquid b/pos-module-tests/modules/tests/public/lib/assertions/blank.liquid
index 3a83aff..02647a9 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/blank.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/blank.liquid
@@ -1,5 +1,10 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for blank field
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
unless object[field_name] == blank
function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.be_blank', message: null
endunless
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/equal.liquid b/pos-module-tests/modules/tests/public/lib/assertions/equal.liquid
index 33a4401..9b52a08 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/equal.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/equal.liquid
@@ -1,9 +1,15 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} given - actual value to compare
+ @param {string} expected - expected value to compare against
+ @param {string} field_name - name of the field being tested
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if given != expected
assign msg = 'modules/tests/should.equal' | t: given: given, expected: expected
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: msg
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: msg, key: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/invalid_object.liquid b/pos-module-tests/modules/tests/public/lib/assertions/invalid_object.liquid
index ed73da9..71d0782 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/invalid_object.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/invalid_object.liquid
@@ -1,7 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check invalidity of
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if object.valid
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: object.errors
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: object.errors, key: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/not_presence.liquid b/pos-module-tests/modules/tests/public/lib/assertions/not_presence.liquid
index f9806eb..108103a 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/not_presence.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/not_presence.liquid
@@ -1,7 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for field absence
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if object[field_name] != blank
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank'
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank', message: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/not_true.liquid b/pos-module-tests/modules/tests/public/lib/assertions/not_true.liquid
index 61b055a..3db37f2 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/not_true.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/not_true.liquid
@@ -1,9 +1,15 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object containing the field to check
+ @param {string} field_name - name of the field being tested
+ @param {string} value - value to check for falsiness
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
assign value = value | default: object[field_name]
if value
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_true'
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_true', message: null
endif
return contract
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/not_valid_object.liquid b/pos-module-tests/modules/tests/public/lib/assertions/not_valid_object.liquid
index 5268eb4..62b7d72 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/not_valid_object.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/not_valid_object.liquid
@@ -1,7 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check invalidity of
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if object.valid == true
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_valid'
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_valid', message: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/object_contains_object.liquid b/pos-module-tests/modules/tests/public/lib/assertions/object_contains_object.liquid
index 15eec11..92ff495 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/object_contains_object.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/object_contains_object.liquid
@@ -1,5 +1,11 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} given - object to check against
+ @param {object} object_contains - subset that should be contained in given
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
for property in object_contains
assign key = property[0]
@@ -7,11 +13,11 @@
if given[key] == blank
assign message = 'modules/tests/should.have_key' | t: field_name: field_name
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message, key: null
else
if given[key] != value
assign message = 'modules/tests/should.have_key_with_value' | t: value: value
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: key, message: message, key: null
endif
endif
endfor
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/presence.liquid b/pos-module-tests/modules/tests/public/lib/assertions/presence.liquid
index 10f1ab7..654355b 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/presence.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/presence.liquid
@@ -1,7 +1,12 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field being tested
+ @param {object} object - object to check for field presence
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if object[field_name] == blank
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank'
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.not.be_blank', message: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/true.liquid b/pos-module-tests/modules/tests/public/lib/assertions/true.liquid
index daac6d3..396c8d7 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/true.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/true.liquid
@@ -1,9 +1,15 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object containing the field to check
+ @param {string} field_name - name of the field being tested
+ @param {string} value - value to check for truthiness
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
assign value = value | default: object[field_name]
unless value
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.be_true'
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, key: 'modules/tests/should.be_true', message: null
endunless
return contract
diff --git a/pos-module-tests/modules/tests/public/lib/assertions/valid_object.liquid b/pos-module-tests/modules/tests/public/lib/assertions/valid_object.liquid
index a4c44f2..3c8233b 100644
--- a/pos-module-tests/modules/tests/public/lib/assertions/valid_object.liquid
+++ b/pos-module-tests/modules/tests/public/lib/assertions/valid_object.liquid
@@ -1,8 +1,13 @@
+{% doc %}
+ @param {object} contract - test contract object tracking results
+ @param {object} object - object to check validity of
+ @param {string} field_name - name of the field being tested
+{% enddoc %}
{% liquid
- hash_assign contract['total'] = contract['total'] | plus: 1
+ assign contract.total = contract['total'] | plus: 1
if object.valid != true
assign message = 'should be valid: ' | append: object.errors
- function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: message
+ function contract = 'modules/tests/helpers/register_error', contract: contract, field_name: field_name, message: message, key: null
endif
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/commands/run.liquid b/pos-module-tests/modules/tests/public/lib/commands/run.liquid
index 87930c7..8b9f928 100644
--- a/pos-module-tests/modules/tests/public/lib/commands/run.liquid
+++ b/pos-module-tests/modules/tests/public/lib/commands/run.liquid
@@ -1,11 +1,17 @@
+{% doc %}
+ @param {string} test_name - name of the test to run
+ @param {string} format - output format for test results
+{% enddoc %}
{% liquid
assign ctx = context
- hash_assign ctx['tests'] = true
+ assign ctx.tests = true
log 'Starting unit tests', type: test_name
assign __start = "now" | to_time
assign per_page = 100
- graphql total_pages = 'modules/tests/test_files/count', per_page: per_page, path: context.params.name | dig: "admin_liquid_partials" | dig: "total_pages"
+ graphql count_result = 'modules/tests/test_files/count', per_page: per_page, path: context.params.name
+ assign total_pages = count_result | dig: "admin_liquid_partials" | dig: "total_pages"
+ assign tests = null
if tests.size == 0
unless format == 'js'
echo 'no tests found'
@@ -15,31 +21,29 @@
assign contracts = '' | split: ','
for page in (1..total_pages)
- graphql tests = 'modules/tests/test_files/search', path: context.params.name, page: page, per_page: per_page | dig: "admin_liquid_partials" | dig: "results"
+ # platformos-check-disable NestedGraphQLQuery
+ graphql search_result = 'modules/tests/test_files/search', path: context.params.name, page: page, per_page: per_page
+ # platformos-check-enable NestedGraphQLQuery
+ assign tests = search_result | dig: "admin_liquid_partials" | dig: "results"
for test in tests
log test, type: test_name
- assign contract = '{ "errors": {}, "success": true, "total": 0 }' | parse_json
+ assign contract = { "errors": {}, "success": true, "total": 0 }
- # platformos-check-disable ConvertIncludeToRender
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
include test.path, registry: test.path, contract: contract
- # platformos-check-enable ConvertIncludeToRender
- hash_assign contract['test_path'] = test.path
- assign contracts = contracts | add_to_array: contract
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
+ assign contract.test_path = test.path
+ assign contracts << contract
assign total_errors = total_errors | plus: contract.errors.size
endfor
endfor
assign __stop = "now" | to_time
assign total_duration = __start | time_diff: __stop, 'ms' | round
- assign data = '{}' | parse_json
- hash_assign data['contracts'] = contracts
- hash_assign data['total_errors'] = total_errors
- hash_assign data['total_duration'] = total_duration
-
assign test_formatter = format | default: 'html' | prepend: 'modules/tests/tests/show_'
- # platformos-check-disable ConvertIncludeToRender
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
include test_formatter, contracts: contracts, total_errors: total_errors, total_duration: total_duration, test_name: test_name
- # platformos-check-enable ConvertIncludeToRender
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
if total_errors > 0
response_status 500
endif
diff --git a/pos-module-tests/modules/tests/public/lib/helpers/register_error.liquid b/pos-module-tests/modules/tests/public/lib/helpers/register_error.liquid
index 11dfa1d..3519de8 100644
--- a/pos-module-tests/modules/tests/public/lib/helpers/register_error.liquid
+++ b/pos-module-tests/modules/tests/public/lib/helpers/register_error.liquid
@@ -1,11 +1,9 @@
-{% comment %}
- @params
- contract - { errors: {}, success: true }
- field_name
- message:
- key: i18n to be resolved into message
-{% endcomment %}
-
+{% doc %}
+ @param {string} key - i18n key to be resolved into message
+ @param {string} message - error message
+ @param {object} contract - test contract object tracking results
+ @param {string} field_name - name of the field with error
+{% enddoc %}
{% liquid
assign key = key | default: null
assign message = message | default: null
@@ -18,10 +16,10 @@
assign errors = contract.errors
assign field_erorrs = errors[field_name] | default: '[]' | parse_json
- assign field_erorrs = field_erorrs | array_add: msg
+ assign field_erorrs << msg
- hash_assign errors[field_name] = field_erorrs
- hash_assign contract['success'] = false
+ assign errors[field_name] = field_erorrs
+ assign contract.success = false
return contract
%}
diff --git a/pos-module-tests/modules/tests/public/lib/queries/sent_mails/find.liquid b/pos-module-tests/modules/tests/public/lib/queries/sent_mails/find.liquid
index 4ab4a05..8f0ffab 100644
--- a/pos-module-tests/modules/tests/public/lib/queries/sent_mails/find.liquid
+++ b/pos-module-tests/modules/tests/public/lib/queries/sent_mails/find.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {string} id - id of the sent mail to find
+{% enddoc %}
{% liquid
if id == blank
return null
diff --git a/pos-module-tests/modules/tests/public/lib/queries/sent_mails/search.liquid b/pos-module-tests/modules/tests/public/lib/queries/sent_mails/search.liquid
index 066ec06..648d9c5 100644
--- a/pos-module-tests/modules/tests/public/lib/queries/sent_mails/search.liquid
+++ b/pos-module-tests/modules/tests/public/lib/queries/sent_mails/search.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {number} limit - maximum number of results to return
+ @param {number} page - page number for pagination
+{% enddoc %}
{% liquid
graphql r = 'modules/tests/sent_mails/search', limit: limit, page: page
return r.mails
diff --git a/pos-module-tests/modules/tests/public/views/layouts/mailer.html.liquid b/pos-module-tests/modules/tests/public/views/layouts/mailer.html.liquid
index c33042a..9ad2e52 100644
--- a/pos-module-tests/modules/tests/public/views/layouts/mailer.html.liquid
+++ b/pos-module-tests/modules/tests/public/views/layouts/mailer.html.liquid
@@ -149,8 +149,9 @@
diff --git a/pos-module-tests/modules/tests/public/views/pages/_tests/index.js.liquid b/pos-module-tests/modules/tests/public/views/pages/_tests/index.js.liquid
index 0725673..c3fb479 100644
--- a/pos-module-tests/modules/tests/public/views/pages/_tests/index.js.liquid
+++ b/pos-module-tests/modules/tests/public/views/pages/_tests/index.js.liquid
@@ -6,18 +6,18 @@ layout: ''
assign per_page = 100
graphql total_pages = 'modules/tests/test_files/count', per_page: per_page, path: context.params.name | dig: "admin_liquid_partials" | dig: "total_pages"
- assign result = '[]' | parse_json
+ assign result = []
for page in (1..total_pages)
+ # platformos-check-disable NestedGraphQLQuery
graphql tests = 'modules/tests/test_files/search', path: context.params.name, page: page, per_page: per_page | dig: "admin_liquid_partials" | dig: "results"
+ # platformos-check-enable NestedGraphQLQuery
for test in tests
assign test_name = test.path | remove_first: 'lib/test/' | remove_first: '_test'
assign test_url = '/_tests/run.js?test_name=' | append: test_name
- assign test_object = '{}' | parse_json
- hash_assign test_object['name'] = test_name
- hash_assign test_object['url'] = test_url
- assign result = result | add_to_array: test_object
+ assign test_object = { "name": test_name, "url": test_url }
+ assign result << test_object
endfor
endfor
@@ -25,4 +25,4 @@ layout: ''
else
echo '{"error":"Tests can only be accessed in staging or development environment"}'
endif
-%}
+ %}
diff --git a/pos-module-tests/modules/tests/public/views/pages/_tests/run.html.liquid b/pos-module-tests/modules/tests/public/views/pages/_tests/run.html.liquid
index 78ba8fb..810c933 100644
--- a/pos-module-tests/modules/tests/public/views/pages/_tests/run.html.liquid
+++ b/pos-module-tests/modules/tests/public/views/pages/_tests/run.html.liquid
@@ -4,8 +4,8 @@ layout: modules/tests/test
{% liquid
if context.environment == 'staging' or context.environment == 'development'
assign test_name = 5 | random_string | prepend: "liquid_test_"
- # platformos-check-disable ConvertIncludeToRender
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
include 'modules/tests/commands/run', format: context.params.formatter, test_name: test_name
- # platformos-check-enable ConvertIncludeToRender
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
endif
%}
diff --git a/pos-module-tests/modules/tests/public/views/pages/_tests/run.js.liquid b/pos-module-tests/modules/tests/public/views/pages/_tests/run.js.liquid
index d36090c..6d123ab 100644
--- a/pos-module-tests/modules/tests/public/views/pages/_tests/run.js.liquid
+++ b/pos-module-tests/modules/tests/public/views/pages/_tests/run.js.liquid
@@ -4,9 +4,9 @@ layout: ''
{% liquid
if context.environment == 'staging' or context.environment == 'development'
assign test_name = 5 | random_string | prepend: "liquid_test_"
- # platformos-check-disable ConvertIncludeToRender
+ # platformos-check-disable ConvertIncludeToRender, DeprecatedTag
include 'modules/tests/commands/run', format: 'js', test_name: test_name
- # platformos-check-enable ConvertIncludeToRender
+ # platformos-check-enable ConvertIncludeToRender, DeprecatedTag
else
echo '{"success":false,"error":"Tests can only be run in staging or development environment"}'
endif
diff --git a/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.js.liquid b/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.js.liquid
index 79956bd..aa11aca 100644
--- a/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.js.liquid
+++ b/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.js.liquid
@@ -4,9 +4,11 @@ layout: ''
{% if context.environment == 'staging' or context.environment == 'development' %}
{% assign test_name = 5 | random_string | prepend: "liquid_test_" %}
{% background source_name: "liquid_tests", test_name: test_name %}
+ {% comment %}platformos-check-disable DeprecatedTag{% endcomment %}
{% include 'modules/tests/commands/run', format: 'log_js', test_name: test_name %}
+ {% comment %}platformos-check-enable DeprecatedTag{% endcomment %}
{% endbackground %}
- {% assign result = '{}' | parse_json | hash_merge: test_name: test_name %}
+ {% assign result = { "test_name": test_name } %}
{{ result }}
{% else %}
{"success":false,"error":"Tests can only be run in staging or development environment"}
diff --git a/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.liquid b/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.liquid
index 7cb08df..791a9e9 100644
--- a/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.liquid
+++ b/pos-module-tests/modules/tests/public/views/pages/_tests/run_async.liquid
@@ -4,7 +4,9 @@ layout: ''
{% if context.environment == 'staging' %}
{% assign test_name = 5 | random_string | prepend: "liquid_test_" %}
{% background source_name: "liquid_tests", test_name: test_name %}
+ {% comment %}platformos-check-disable DeprecatedTag{% endcomment %}
{% include 'modules/tests/commands/run', format: 'log', test_name: test_name %}
+ {% comment %}platformos-check-enable DeprecatedTag{% endcomment %}
{% endbackground %}
{{ test_name }}
{% endif %}
diff --git a/pos-module-tests/modules/tests/public/views/partials/sent_mails/list.liquid b/pos-module-tests/modules/tests/public/views/partials/sent_mails/list.liquid
index eb8e245..176c391 100644
--- a/pos-module-tests/modules/tests/public/views/partials/sent_mails/list.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/sent_mails/list.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} mails - collection of sent mail objects
+{% enddoc %}
Sent mails
@@ -17,4 +20,4 @@
{% endfor %}
- {% render 'modules/tests/sent_mails/pagination', collection: mails %}
+ {% render 'modules/tests/sent_mails/pagination', collection: mails, container_class: null, button_attrs: null, page_name: null %}
diff --git a/pos-module-tests/modules/tests/public/views/partials/sent_mails/pagination.liquid b/pos-module-tests/modules/tests/public/views/partials/sent_mails/pagination.liquid
index 1ecf01a..f58fd1e 100644
--- a/pos-module-tests/modules/tests/public/views/partials/sent_mails/pagination.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/sent_mails/pagination.liquid
@@ -1,11 +1,9 @@
-{% comment %}
- Required params:
- collection: collection
- current_page: integer
- Optional params:
- button_attrs: string
- container_class: string
-{% endcomment %}
+{% doc %}
+ @param {string} container_class - CSS class for the pagination container
+ @param {string} button_attrs - HTML attributes for pagination buttons
+ @param {object} collection - paginated collection object
+ @param {string} page_name - name of the page query parameter
+{% enddoc %}
{% liquid
assign container_class = container_class | default: "subtitle flex justify-center md:justify-end items-center mt-8 mx-auto md:mr-0 md:ms-auto"
assign button_attrs = button_attrs | default: '' | html_safe
@@ -26,7 +24,7 @@
class="p-4 text-interaction hover:text-interaction-hover"
>
- <
+ <
{% endif %}
diff --git a/pos-module-tests/modules/tests/public/views/partials/sent_mails/show.liquid b/pos-module-tests/modules/tests/public/views/partials/sent_mails/show.liquid
index 2fad380..eb26c99 100644
--- a/pos-module-tests/modules/tests/public/views/partials/sent_mails/show.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/sent_mails/show.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} mail - sent mail object to display
+{% enddoc %}
Back
Sent mail
Sujbect: {{ mail.options.subject }}
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/index.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/index.liquid
index 424cd72..93f4439 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/index.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/index.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} tests - collection of test objects to display
+{% enddoc %}
{% endfor %}
+
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/show_html.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/show_html.liquid
index c2ce568..385222a 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/show_html.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/show_html.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
{% assign total = 0 %}
{% liquid
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/show_js.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/show_js.liquid
index f9e4d75..a43633a 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/show_js.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/show_js.liquid
@@ -1,30 +1,31 @@
+{% doc %}
+ @param {number} total_errors - total number of errors
+ @param {object} contracts - collection of test contracts
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
{% liquid
- assign result = '{}' | parse_json
+ assign result = {}
assign total_assertions = 0
- assign tests_array = '[]' | parse_json
- for contract in contracts
+ assign tests_array = []
+ for contract in tests_array
assign total_assertions = total_assertions | plus: contract.total
- assign test_result = '{}' | parse_json
- hash_assign test_result['name'] = contract.test_path
- hash_assign test_result['success'] = contract.success
- hash_assign test_result['assertions'] = contract.total
- hash_assign test_result['errors'] = contract.errors
+ assign test_result = { "name": contract.test_path, "success": contract.success, "assertions": contract.total, "errors": contract.errors }
- assign tests_array = tests_array | add_to_array: test_result
+ assign tests_array << test_result
endfor
if total_errors > 0
- hash_assign result['success'] = false
+ assign result.success = false
else
- hash_assign result['success'] = true
+ assign result.success = true
endif
- hash_assign result['total_tests'] = contracts.size
- hash_assign result['total_assertions'] = total_assertions
- hash_assign result['total_errors'] = total_errors
- hash_assign result['duration_ms'] = total_duration
- hash_assign result['tests'] = tests_array
-%}
+ assign result.total_tests = contracts.size
+ assign result.total_assertions = total_assertions
+ assign result.total_errors = total_errors
+ assign result.duration_ms = total_duration
+ assign result.tests = tests_array
+ %}
{{ result | json }}
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/show_log.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/show_log.liquid
index 9abe2cc..f53c492 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/show_log.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/show_log.liquid
@@ -1,3 +1,9 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+ @param {string} test_name - name of the test run
+{% enddoc %}
{% capture result %}
{% render 'modules/tests/tests/show_text', contracts: contracts, total_errors: total_errors, total_duration: total_duration, test_name: test_name %}
{% endcapture %}
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/show_log_js.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/show_log_js.liquid
index ffd51c6..55b4fd0 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/show_log_js.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/show_log_js.liquid
@@ -1,5 +1,11 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {number} total_duration - total test duration in ms
+ @param {string} test_name - name of the test run
+{% enddoc %}
{% capture result %}
- {% render 'modules/tests/tests/show_js', contracts: contracts, total_errors: total_errors, total_duration: total_duration, test_name: test_name %}
+ {% render 'modules/tests/tests/show_js', contracts: contracts, total_errors: total_errors, total_duration: total_duration %}
{% endcapture %}
{% assign result = result | html_safe %}
{% liquid
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/show_text.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/show_text.liquid
index 3108c53..1068f1f 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/show_text.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/show_text.liquid
@@ -1,6 +1,13 @@
+{% doc %}
+ @param {object} contracts - collection of test contracts
+ @param {number} total_errors - total number of errors
+ @param {string} test_name - name of the test run
+ @param {number} total_duration - total test duration in ms
+{% enddoc %}
Liquid tests
------------------------
{% liquid
+ assign total = 0
for contract in contracts
render 'modules/tests/tests/test_report_text', name: contract.test_path, contract: contract
assign total = total | plus: contract.total
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/test_report_html.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/test_report_html.liquid
index 2ff1a43..d2570a7 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/test_report_html.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/test_report_html.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} name - test name path
+ @param {object} contract - test contract with results
+{% enddoc %}
{% assign test_name = name | replace: 'test/', '' %}
diff --git a/pos-module-tests/modules/tests/public/views/partials/tests/test_report_text.liquid b/pos-module-tests/modules/tests/public/views/partials/tests/test_report_text.liquid
index 29a8450..8527f6e 100644
--- a/pos-module-tests/modules/tests/public/views/partials/tests/test_report_text.liquid
+++ b/pos-module-tests/modules/tests/public/views/partials/tests/test_report_text.liquid
@@ -1,3 +1,7 @@
+{% doc %}
+ @param {string} name - test name path
+ @param {object} contract - test contract with results
+{% enddoc %}
{% assign test_name = name | replace: 'test/', '' %}
{{ test_name }}
{% for e in contract.errors %}
diff --git a/pos-module-tests/modules/tests/template-values.json b/pos-module-tests/modules/tests/template-values.json
index 59e310f..d955ac6 100644
--- a/pos-module-tests/modules/tests/template-values.json
+++ b/pos-module-tests/modules/tests/template-values.json
@@ -2,6 +2,6 @@
"name": "Pos Module Tests",
"machine_name": "tests",
"type": "module",
- "version": "1.2.0",
+ "version": "1.3.2",
"dependencies": {}
}
diff --git a/pos-module-user/a.txt b/pos-module-user/a.txt
new file mode 100644
index 0000000..257d71f
--- /dev/null
+++ b/pos-module-user/a.txt
@@ -0,0 +1,2505 @@
+[
+ {
+ "type": "LiquidHtml",
+ "check": "CircularRender",
+ "message": "Circular render detected: navigation/collapsible.liquid -> navigation/collapsible.liquid. This will cause an infinite loop at runtime.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/navigation/collapsible.liquid",
+ "severity": 0,
+ "start": {
+ "index": 1694,
+ "line": 45,
+ "character": 40
+ },
+ "end": {
+ "index": 1741,
+ "line": 45,
+ "character": 87
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "MetadataParamsCheck",
+ "message": "Required parameter user_id must be passed to function call",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/passwords/create.liquid",
+ "severity": 0,
+ "start": {
+ "index": 385,
+ "line": 13,
+ "character": 13
+ },
+ "end": {
+ "index": 517,
+ "line": 13,
+ "character": 145
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/reset.liquid",
+ "severity": 1,
+ "start": {
+ "index": 322,
+ "line": 14,
+ "character": 38
+ },
+ "end": {
+ "index": 336,
+ "line": 14,
+ "character": 52
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/reset.liquid",
+ "severity": 1,
+ "start": {
+ "index": 373,
+ "line": 15,
+ "character": 36
+ },
+ "end": {
+ "index": 386,
+ "line": 15,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/sessions/new.liquid",
+ "severity": 1,
+ "start": {
+ "index": 311,
+ "line": 14,
+ "character": 36
+ },
+ "end": {
+ "index": 324,
+ "line": 14,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/new.liquid",
+ "severity": 1,
+ "start": {
+ "index": 255,
+ "line": 12,
+ "character": 38
+ },
+ "end": {
+ "index": 269,
+ "line": 12,
+ "character": 52
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/new.liquid",
+ "severity": 1,
+ "start": {
+ "index": 306,
+ "line": 13,
+ "character": 36
+ },
+ "end": {
+ "index": 319,
+ "line": 13,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/email/edit.liquid",
+ "severity": 1,
+ "start": {
+ "index": 346,
+ "line": 14,
+ "character": 38
+ },
+ "end": {
+ "index": 360,
+ "line": 14,
+ "character": 52
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/email/edit.liquid",
+ "severity": 1,
+ "start": {
+ "index": 397,
+ "line": 15,
+ "character": 36
+ },
+ "end": {
+ "index": 410,
+ "line": 15,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/new.liquid",
+ "severity": 1,
+ "start": {
+ "index": 419,
+ "line": 17,
+ "character": 36
+ },
+ "end": {
+ "index": 432,
+ "line": 17,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UndefinedObject",
+ "message": "Unknown object 'params' used.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/new.liquid",
+ "severity": 1,
+ "start": {
+ "index": 469,
+ "line": 18,
+ "character": 36
+ },
+ "end": {
+ "index": 482,
+ "line": 18,
+ "character": 49
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "MetadataParamsCheck",
+ "message": "Required parameter user_id must be passed to function call",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/create.liquid",
+ "severity": 0,
+ "start": {
+ "index": 368,
+ "line": 10,
+ "character": 11
+ },
+ "end": {
+ "index": 546,
+ "line": 10,
+ "character": 189
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "MetadataParamsCheck",
+ "message": "Required parameter user_id must be passed to function call",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/2fa.liquid",
+ "severity": 0,
+ "start": {
+ "index": 746,
+ "line": 17,
+ "character": 13
+ },
+ "end": {
+ "index": 908,
+ "line": 17,
+ "character": 175
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "MetadataParamsCheck",
+ "message": "Required parameter user_id must be passed to function call",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/oauth/callback.liquid",
+ "severity": 0,
+ "start": {
+ "index": 4124,
+ "line": 92,
+ "character": 13
+ },
+ "end": {
+ "index": 4256,
+ "line": 92,
+ "character": 145
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/2fa.errors.otp_code' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/2fa.errors.password' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/2fa.new.confirm_and_enable' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/authentication_links.created' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/authentication_links.something_went_wrong' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.provider_already_assigned' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.sub_already_assigned' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.signed_in' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.assigned_provider' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.unassigned_provider' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.failed_to_create_account' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.invalid_request' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.unassign_provider' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/oauth.app.user_info_error' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/passwords.password_confirmation' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/passwords.login' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/passwords.expired_link' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.email.required' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.email.format' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.taken' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.not_uniq' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.invalid_email_or_password' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.invalid_password' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.matches' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.not_truthy' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.password.lowercase' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.password.uppercase' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.password.number' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.password.do_not_match' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/user/validation.invalid' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/common-styling/form.select' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/common-styling/form.type_to_filter' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/common-styling/form.no_filter_results' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/common-styling/form.at_least_one_option' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/common.deleted' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/common.deleted_failed' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.disallowed' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.not_url' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.blank' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.email' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.array.not_included' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.array.not_unique' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.hcaptcha' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.number.greater_than' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.number.greater_than_or_equal' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.number.less_than' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.number.less_than_or_equal' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.number.equal_to' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.too_short' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.taken' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.not_uniq' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.not_truthy' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.not_null' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.password.lowercase' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.password.uppercase' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.password.number' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.invalid' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/core/validation.not_exist' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.be_false' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.be_valid' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.equal_not_verbose' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.match' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.be_blank' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.be_true' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.not.be_empty' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.not.be_blank' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.not.be_valid' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ },
+ {
+ "type": "LiquidHtml",
+ "check": "UnusedTranslationKey",
+ "message": "Translation key 'modules/tests/should.not.be_true' is defined but never used in any template.",
+ "uri": "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "severity": 2,
+ "start": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ },
+ "end": {
+ "index": 0,
+ "line": 0,
+ "character": 0
+ }
+ }
+]
+{
+ "settings": {
+ "CircularRender": {
+ "enabled": true,
+ "severity": 0
+ },
+ "DeprecatedFilter": {
+ "enabled": true,
+ "severity": 1
+ },
+ "DeprecatedTag": {
+ "enabled": true,
+ "severity": 1
+ },
+ "DuplicateFunctionArguments": {
+ "enabled": true,
+ "severity": 1
+ },
+ "DuplicateRenderPartialArguments": {
+ "enabled": true,
+ "severity": 1
+ },
+ "GraphQLCheck": {
+ "enabled": true,
+ "severity": 0
+ },
+ "GraphQLVariablesCheck": {
+ "enabled": true,
+ "severity": 0
+ },
+ "ImgWidthAndHeight": {
+ "enabled": true,
+ "severity": 0
+ },
+ "InvalidHashAssignTarget": {
+ "enabled": true,
+ "severity": 0
+ },
+ "JSONSyntaxError": {
+ "enabled": true,
+ "severity": 0
+ },
+ "LiquidHTMLSyntaxError": {
+ "enabled": true,
+ "severity": 0
+ },
+ "MatchingTranslations": {
+ "enabled": true,
+ "severity": 0
+ },
+ "MetadataParamsCheck": {
+ "enabled": true,
+ "severity": 0
+ },
+ "MissingAsset": {
+ "enabled": true,
+ "severity": 0
+ },
+ "MissingPartial": {
+ "enabled": true,
+ "severity": 0,
+ "ignoreMissing": []
+ },
+ "MissingRenderPartialArguments": {
+ "enabled": true,
+ "severity": 0
+ },
+ "NestedGraphQLQuery": {
+ "enabled": true,
+ "severity": 1
+ },
+ "OrphanedPartial": {
+ "enabled": true,
+ "severity": 1
+ },
+ "ParserBlockingScript": {
+ "enabled": true,
+ "severity": 0
+ },
+ "TranslationKeyExists": {
+ "enabled": true,
+ "severity": 0
+ },
+ "UnclosedHTMLElement": {
+ "enabled": true,
+ "severity": 1
+ },
+ "UndefinedObject": {
+ "enabled": true,
+ "severity": 1
+ },
+ "UniqueDocParamNames": {
+ "enabled": true,
+ "severity": 0
+ },
+ "UnknownFilter": {
+ "enabled": true,
+ "severity": 0
+ },
+ "UnknownProperty": {
+ "enabled": true,
+ "severity": 0
+ },
+ "UnrecognizedRenderPartialArguments": {
+ "enabled": true,
+ "severity": 1
+ },
+ "UnusedAssign": {
+ "enabled": true,
+ "severity": 1
+ },
+ "UnusedDocParam": {
+ "enabled": true,
+ "severity": 1
+ },
+ "UnusedTranslationKey": {
+ "enabled": true,
+ "severity": 2
+ },
+ "ValidDocParamTypes": {
+ "enabled": true,
+ "severity": 0
+ },
+ "ValidHTMLTranslation": {
+ "enabled": true,
+ "severity": 1
+ },
+ "ValidJSON": {
+ "enabled": true,
+ "severity": 0
+ },
+ "ValidRenderPartialArgumentTypes": {
+ "enabled": true,
+ "severity": 1
+ },
+ "VariableName": {
+ "enabled": true,
+ "severity": 1,
+ "format": "snake_case"
+ }
+ },
+ "checks": [
+ {
+ "meta": {
+ "code": "CircularRender",
+ "name": "Prevent circular renders",
+ "docs": {
+ "description": "Reports circular render/function/include chains that would cause infinite loops at runtime.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/circular-render"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "DeprecatedFilter",
+ "aliases": [
+ "DeprecatedFilters"
+ ],
+ "name": "Deprecated Filter",
+ "docs": {
+ "description": "Discourages using deprecated filters.",
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/deprecated-filter",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "DeprecatedTag",
+ "aliases": [
+ "DeprecatedTags"
+ ],
+ "name": "Deprecated Tag",
+ "docs": {
+ "description": "This check is aimed at eliminating the use of deprecated tags.",
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/deprecated-tag",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "DuplicateFunctionArguments",
+ "name": "Duplicate Function Arguments",
+ "aliases": [],
+ "docs": {
+ "description": "This check ensures that no duplicate argument names are provided when invoking partial as a function.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/duplicate-function-arguments"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "DuplicateRenderPartialArguments",
+ "name": "Duplicate Render Partial Arguments",
+ "aliases": [
+ "DuplicateRenderPartialParams"
+ ],
+ "docs": {
+ "description": "This check ensures that no duplicate argument names are provided when rendering a partial.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/duplicate-render-partial-arguments"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ImgWidthAndHeight",
+ "name": "Width and height attributes on image tags",
+ "docs": {
+ "description": "This check is aimed at eliminating content layout shift by enforcing the use of the width and height attributes on img tags.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/img-width-and-height"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "JSONSyntaxError",
+ "name": "Enforce valid JSON",
+ "docs": {
+ "description": "This check exists to prevent invalid JSON files in apps.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/json-syntax-error"
+ },
+ "type": "JSON",
+ "severity": 0,
+ "schema": {},
+ "targets": [],
+ "deprecated": true
+ }
+ },
+ {
+ "meta": {
+ "code": "LiquidHTMLSyntaxError",
+ "aliases": [
+ "SyntaxError",
+ "HtmlParsingError"
+ ],
+ "name": "Prevent LiquidHTML Syntax Errors",
+ "docs": {
+ "description": "This check exists to inform the user of Liquid HTML syntax errors.",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "MatchingTranslations",
+ "name": "Translation files should have the same keys",
+ "docs": {
+ "description": "TODO",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/matching-translations"
+ },
+ "type": "YAML",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "MissingAsset",
+ "name": "Avoid rendering missing asset files",
+ "docs": {
+ "description": "Reports missing asset files",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/missing-asset"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "MissingPartial",
+ "name": "Avoid rendering missing partials",
+ "docs": {
+ "description": "Reports missing partial liquid file",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/missing-partial"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {
+ "ignoreMissing": {
+ "options": {
+ "type": "array",
+ "defaultValue": [],
+ "itemType": {
+ "options": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "OrphanedPartial",
+ "name": "Prevent orphaned partials",
+ "docs": {
+ "description": "This check exists to prevent orphaned partials in platformOS apps.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/orphaned-partial"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ParserBlockingScript",
+ "aliases": [
+ "ParserBlockingScriptTag"
+ ],
+ "name": "Avoid parser blocking scripts",
+ "docs": {
+ "description": "Parser-blocking scripts delay page rendering by blocking the HTML parser.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/parser-blocking-script"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "TranslationKeyExists",
+ "name": "Reports missing translation keys",
+ "docs": {
+ "description": "Reports missing translation keys",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/translation-key-exists"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnclosedHTMLElement",
+ "aliases": [
+ "UnclosedHTMLElement"
+ ],
+ "name": "Unclosed HTML Element",
+ "docs": {
+ "description": "Warns you of unbalanced HTML tags in branching code",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unclosed-html-element"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UndefinedObject",
+ "name": "Undefined Object",
+ "docs": {
+ "description": "This check exists to identify references to undefined Liquid objects.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/undefined-object"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UniqueDocParamNames",
+ "name": "Unique doc parameter names",
+ "docs": {
+ "description": "This check exists to ensure any parameter names defined in the `doc` tag are unique.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unique-doc-param-names"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnknownFilter",
+ "name": "Prevent use of unknown filters",
+ "docs": {
+ "description": "This check is aimed at preventing the use of unknown filters.",
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unknown-filter",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnrecognizedRenderPartialArguments",
+ "name": "Unrecognized Render Partial Arguments",
+ "aliases": [
+ "UnrecognizedRenderPartialParams"
+ ],
+ "docs": {
+ "description": "This check ensures that no unknown arguments are used when rendering a partial.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unrecognized-render-partial-arguments"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnusedAssign",
+ "name": "Prevent unused assigns",
+ "docs": {
+ "description": "This check exists to prevent bloat by surfacing variable definitions that are not used.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unused-assign"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnusedDocParam",
+ "name": "Prevent unused doc parameters",
+ "docs": {
+ "description": "This check exists to ensure any parameters defined in the `doc` tag are used within the partial.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unused-doc-param"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ValidHTMLTranslation",
+ "name": "Valid HTML Translation",
+ "docs": {
+ "description": "This check exists to prevent invalid HTML inside translations.",
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-html-translation",
+ "recommended": true
+ },
+ "type": "YAML",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ValidJSON",
+ "aliases": [
+ "ValidJson"
+ ],
+ "name": "Enforce valid JSON",
+ "docs": {
+ "description": "This check exists to prevent invalid JSON files in apps. Will check against schema if available.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/json-syntax-error"
+ },
+ "type": "JSON",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ValidDocParamTypes",
+ "name": "Valid doc parameter types",
+ "docs": {
+ "description": "This check exists to ensure any parameter types defined in the `doc` tag are valid.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-doc-param-types"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "ValidRenderPartialArgumentTypes",
+ "name": "Valid Render Partial Argument Types",
+ "aliases": [
+ "ValidRenderPartialParamTypes"
+ ],
+ "docs": {
+ "description": "This check ensures that arguments passed to partial match the expected types defined in the liquidDoc header if present.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-render-partial-argument-types"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "VariableName",
+ "name": "Invalid variable naming format",
+ "docs": {
+ "description": "This check is aimed at using certain variable naming conventions",
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/variable-name",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {
+ "format": {
+ "options": {
+ "type": "string",
+ "defaultValue": "snake_case"
+ }
+ }
+ },
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "MetadataParamsCheck",
+ "name": "Metadata Params Check",
+ "docs": {
+ "description": "Ensures that parameters referenced in the document exist in metadata.params or in the doc tag.",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "GraphQLVariablesCheck",
+ "name": "GraphQL Variables Check",
+ "docs": {
+ "description": "Ensures that parameters referenced in the document exist in the GraphQL query or mutation.",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "GraphQLCheck",
+ "name": "GraphQL Check",
+ "docs": {
+ "description": "Ensures that GraphQL query or mutation is valid and matches predefined schema.",
+ "recommended": true
+ },
+ "type": "GraphQL",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnknownProperty",
+ "name": "Unknown property access",
+ "docs": {
+ "description": "Reports errors when accessing properties that do not exist on variables with known structure.",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "InvalidHashAssignTarget",
+ "name": "Invalid hash_assign target",
+ "docs": {
+ "description": "Reports errors when hash_assign is used on a variable that is not an object type (e.g., number, string, boolean, array).",
+ "recommended": true
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "MissingRenderPartialArguments",
+ "name": "Missing Required Render Partial Arguments",
+ "aliases": [
+ "MissingRenderPartialParams"
+ ],
+ "docs": {
+ "description": "This check ensures that all required @param arguments declared by a partial are provided at the call site.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/missing-render-partial-arguments"
+ },
+ "type": "LiquidHtml",
+ "severity": 0,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "NestedGraphQLQuery",
+ "name": "Prevent N+1 GraphQL queries in loops",
+ "docs": {
+ "description": "This check detects {% graphql %} tags placed inside loop tags ({% for %}, {% tablerow %}), which causes one database request per loop iteration (N+1 pattern).",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/nested-graphql-query"
+ },
+ "type": "LiquidHtml",
+ "severity": 1,
+ "schema": {},
+ "targets": []
+ }
+ },
+ {
+ "meta": {
+ "code": "UnusedTranslationKey",
+ "name": "Translation key defined but never used",
+ "docs": {
+ "description": "Reports translation keys defined in app or module translation files that are never referenced in any Liquid template.",
+ "recommended": true,
+ "url": "https://documentation.platformos.com/developer-guide/platformos-check/checks/unused-translation-key"
+ },
+ "type": "LiquidHtml",
+ "severity": 2,
+ "schema": {},
+ "targets": []
+ }
+ }
+ ],
+ "ignore": [
+ "node_modules/**"
+ ],
+ "rootUri": "file:///workspaces/pos-modules/pos-module-user"
+}
+[
+ "file:///workspaces/pos-modules/pos-module-user/package.json",
+ "file:///workspaces/pos-modules/pos-module-user/package-lock.json",
+ "file:///workspaces/pos-modules/pos-module-user/app/pos-modules.lock.json",
+ "file:///workspaces/pos-modules/pos-module-user/app/pos-modules.json",
+ "file:///workspaces/pos-modules/pos-module-user/app/config.yml",
+ "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241012150157_setup_user_default_role.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/migrations/20241009125747_enable_complex_passwords.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/template-values.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/package.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/package-lock.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/template-values.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/template-values.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/package.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/package-lock.json",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/template-values.json",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/pages/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/layouts/application.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/tests/post_import/app/migrations/20241202183257_set_superadmin_role.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/partials/profile/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/pages/profile/update.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/pages/profile/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/pages/admin/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/pages/subscription/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/schema/profile.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/schema/oauth.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/api_call.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/schema/status.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/emails/generic.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/api_calls/generic_x_form_encoded.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/api_calls/generic.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/translations/en.yml",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/partials/subscription/home/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/views/partials/admin/home/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/lib/test/commands/user/create_test.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/validation.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/users.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/sessions.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/passwords.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/oauth.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/emails.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/authorization.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/authentication_links.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/translations/en/2fa.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/api_call.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/user_from_temporary_token.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/table_name.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/get_available_oauth_providers.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/get_assigned_oauth_providers.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/flash.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/current_profile.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/can_do_or_unauthorized.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/can_do_or_redirect.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/can_do.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_updated.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_signed_in.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_roles_set.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_role_removed.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_role_appended.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_logout.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_deleted.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/user_created.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/password_created.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/impersonation_started.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/impersonation_ended.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/events/authentication_link_created.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/verify_password_for_user_id.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/verify_password.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/verify_otp.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/update_password.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/update.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/otp.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/load.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/list.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/find.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/emails_count.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/email_update.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/delete.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/create.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/user/count.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/session/destroy.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/update.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/mark_otp.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/delete.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/create.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/oauth/find_by_user_id.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/oauth/find_by_sub.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/oauth/delete.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/oauth/create.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/layouts/test.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/layouts/mailer.html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/translations/en/should.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/helpers/register_error.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/commands/run.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/valid_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/true.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/presence.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/object_contains_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/not_valid_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/not_true.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/not_presence.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/invalid_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/equal.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/assertions/blank.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/graphql/test_files/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/graphql/test_files/count.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/graphql/sent_mails/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/layouts/mailer.html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/layouts/basic.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/translations/en/validation.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/translations/en/common.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/valid_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/uniqueness.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/unique_elements.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/truthy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/presence.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/password_complexity.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/number.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/not_null.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/matches.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/length.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/is_url.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/included.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/hcaptcha.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/exist_in_db.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/equal.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/email.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/elements_included.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/each_element_length.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/validations/date.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/register_error.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/redirect_to.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/log_time.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/hash_to_x_form_encoded.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/authenticity_token.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/events/status_created.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/execute.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/variable/set.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/statuses/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/statuses/delete.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/statuses/create.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/session/set.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/session/delete.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/records/count.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/hook/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/events/search.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/events/events_checks.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/events/create.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/events/consumers.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/email/send.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/graphql/api_calls/send.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/generators/crud/templates/config.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/toasts.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/tip.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/pagination.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/init.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/icon.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/pages/style-guide.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/layouts/style-guide.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/lib/test/commands/user/roles/set_test.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/lib/test/commands/user/roles/remove_test.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/lib/test/commands/user/roles/append_test.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/sessions/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/reset.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/passwords/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/oauth/providers.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/oauth/listing.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/admin_pages/list.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/2fa/verify.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/2fa/setup.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/2fa/disable.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/users/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/users/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/destroy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/2fa.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/passwords/reset.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/passwords/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/passwords/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/oauth/unassign.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/oauth/start.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/oauth/callback.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/authentication_links/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/otp.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/load.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/get_all.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/current.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/user/count.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/roles/custom.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/roles/all.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/role_permissions/permissions.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/registration_fields/load.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/search_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/find_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/filters_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/queries/profiles/filters.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_password.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_otp.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/update.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/email_update.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/delete.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/destroy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/update_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/update.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/tokenize_names.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/mark_otp.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/delete.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create_validate_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create_validate.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create_proxy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/passwords/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/oauth/create_user.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/emails/auth-link.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/authentication_links/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/roles/set.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/roles/remove.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/graphql/profiles/roles/append.graphql",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/test_report_text.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/test_report_html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/show_text.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/show_log_js.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/show_log.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/show_js.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/show_html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/tests/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/sent_mails/show.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/sent_mails/pagination.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/partials/sent_mails/list.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/run_async.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/run_async.js.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/run.js.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/run.html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/index.js.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/index.html.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/queries/sent_mails/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/lib/queries/sent_mails/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/events/show.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/events/list.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/events/event_card.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/pages/_events/trigger.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/pages/_events/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/variable/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/variable/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/statuses/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/statuses/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/registry/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/registry/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/module/exists.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/hook/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/headscripts/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/headscripts/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/events/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/events/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/queries/constants/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/timezone/get_by_offset.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/timezone/get_by_name.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/timezone/get_all.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/helpers/flash/publish.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/variable/set.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/delete.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/session/set.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/session/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/session/clear.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/hook/fire.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/hook/alter.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/publish.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/broadcast.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/email/send.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/generators/crud/templates/translations/model.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/generators/crud/templates/schema/model.yml",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/user/card.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/user/avatar.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/navigation/collapsible.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/upload.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/password.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/multiselect.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/markdown.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/hcaptcha.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/error_list.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/forms/error_input_handler.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/upload.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/toasts.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/text-styles.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/tags.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/tables.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/spacings.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/navigation.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/links.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/initialization.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/icons.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/headings.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/gradients.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/forms.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/fonts.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/colors.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/buttons.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/style-guide/boxes.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/content/dialog.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/content/card.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/common-styling/public/views/partials/content/alert.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/app/modules/user/public/lib/queries/role_permissions/permissions.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/users/email/edit.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/emails/passwords/reset.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/partials/components/pages/403.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/users/email/update.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/users/email/edit.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/impersonation/destroy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/sessions/impersonation/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/profiles/2fa/new.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/profiles/2fa/disable.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/profiles/2fa/delete.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/views/pages/profiles/2fa/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/helpers/profiles/slugs/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_password/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_password/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_otp/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/verify_otp/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/email_update/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/email_update/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/update/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/update/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/user/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/impersonation/destroy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/impersonation/create.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/update/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/update/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/roles/set.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/roles/remove.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/roles/append.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/mark_otp/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/mark_otp/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/delete/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/delete/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/profiles/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/passwords/create/execute.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/passwords/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/passwords/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/authentication_links/create/execute.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/authentication_links/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/authentication_links/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/sent_mails/show.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/tests/public/views/pages/_tests/sent_mails/index.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/helpers/register_error.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/valid_object.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/uniqueness.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/unique_elements.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/truthy.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/presence.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/password_complexity.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/number.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/not_null.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/matches.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/length.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/included.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/hcaptcha.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/exist_in_db.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/equal.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/email.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/elements_included.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/each_element_length.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/validations/date.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/delete/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/delete/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/statuses/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/create/execute.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/events/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/email/send/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/lib/commands/email/send/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/impersonation/destroy/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/impersonation/create/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/user/public/lib/commands/session/impersonation/create/build.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/variable/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/variable/find.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/registry/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/registry/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/module/exists.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/hook/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/headscripts/search.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/queries/headscripts/get.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/variable/set.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/hook/fire.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/hook/alter.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/email/send.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/email/send/check.liquid",
+ "file:///workspaces/pos-modules/pos-module-user/modules/core/public/views/partials/lib/commands/email/send/build.liquid"
+]
diff --git a/pos-module-user/app/lib/test/commands/user/create_test.liquid b/pos-module-user/app/lib/test/commands/user/create_test.liquid
index 1955bd2..f8a7f43 100644
--- a/pos-module-user/app/lib/test/commands/user/create_test.liquid
+++ b/pos-module-user/app/lib/test/commands/user/create_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - The test contract object
+{% enddoc %}
{% liquid
# test do not explicitly provide roles argument
diff --git a/pos-module-user/app/lib/test/commands/user/roles/append_test.liquid b/pos-module-user/app/lib/test/commands/user/roles/append_test.liquid
index ce0ba24..4bbf769 100644
--- a/pos-module-user/app/lib/test/commands/user/roles/append_test.liquid
+++ b/pos-module-user/app/lib/test/commands/user/roles/append_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - The test contract object
+{% enddoc %}
{% liquid
# seed DB with a user
assign email = 10 | random_string | append: '-user-append@example.com'
diff --git a/pos-module-user/app/lib/test/commands/user/roles/remove_test.liquid b/pos-module-user/app/lib/test/commands/user/roles/remove_test.liquid
index 8b7a6a1..ee09319 100644
--- a/pos-module-user/app/lib/test/commands/user/roles/remove_test.liquid
+++ b/pos-module-user/app/lib/test/commands/user/roles/remove_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - The test contract object
+{% enddoc %}
{% liquid
# test remove role
diff --git a/pos-module-user/app/lib/test/commands/user/roles/set_test.liquid b/pos-module-user/app/lib/test/commands/user/roles/set_test.liquid
index f8a2032..e339c01 100644
--- a/pos-module-user/app/lib/test/commands/user/roles/set_test.liquid
+++ b/pos-module-user/app/lib/test/commands/user/roles/set_test.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} contract - The test contract object
+{% enddoc %}
{% liquid
# test remove role
diff --git a/pos-module-user/app/views/layouts/application.liquid b/pos-module-user/app/views/layouts/application.liquid
index cc9175d..695d57c 100644
--- a/pos-module-user/app/views/layouts/application.liquid
+++ b/pos-module-user/app/views/layouts/application.liquid
@@ -44,7 +44,7 @@
function _ = 'modules/core/commands/session/clear', key: 'sflash'
endif
- render 'modules/common-styling/toasts', params: flash
+ render 'modules/common-styling/toasts', params: flash, autohide: null, delay: null, message: null, severity: null
%}
diff --git a/pos-module-user/app/views/pages/admin/index.liquid b/pos-module-user/app/views/pages/admin/index.liquid
index a6d39c1..db60f78 100644
--- a/pos-module-user/app/views/pages/admin/index.liquid
+++ b/pos-module-user/app/views/pages/admin/index.liquid
@@ -1,10 +1,12 @@
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
# platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'admin.read', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'admin.read', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403', access_callback: null, anonymous_return_to: null, entity: null
+ # platformos-check-enable DeprecatedTag
# platformos-check-enable UnreachableCode
- function users = 'modules/user/queries/user/search', id: null, not_ids: null, email: null, sort: null, limit: 20
+ function users = 'modules/user/queries/user/search', id: null, not_ids: null, email: null, sort: null, limit: 20, page: null
render 'admin/home/index', users: users
%}
diff --git a/pos-module-user/app/views/pages/index.liquid b/pos-module-user/app/views/pages/index.liquid
index 3b1204d..de2159f 100644
--- a/pos-module-user/app/views/pages/index.liquid
+++ b/pos-module-user/app/views/pages/index.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} current_user - The current user object
+{% enddoc %}
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
%}
diff --git a/pos-module-user/app/views/pages/profile/index.liquid b/pos-module-user/app/views/pages/profile/index.liquid
index 15fceb1..f93667b 100644
--- a/pos-module-user/app/views/pages/profile/index.liquid
+++ b/pos-module-user/app/views/pages/profile/index.liquid
@@ -1,9 +1,11 @@
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
# platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'profile.manage', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'profile.manage', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403', access_callback: null, anonymous_return_to: null, entity: null
+ # platformos-check-enable DeprecatedTag
# platformos-check-enable UnreachableCode
- render 'profile/index', errors: null, otp_configured: current_profile.otp_configured
+ render 'profile/index', errors: null, otp_configured: current_profile.otp_configured, current_user: current_profile.user
%}
\ No newline at end of file
diff --git a/pos-module-user/app/views/pages/profile/update.liquid b/pos-module-user/app/views/pages/profile/update.liquid
index 99fb50d..3e6a641 100644
--- a/pos-module-user/app/views/pages/profile/update.liquid
+++ b/pos-module-user/app/views/pages/profile/update.liquid
@@ -2,13 +2,18 @@
method: post
slug: profile/update
---
+{% doc %}
+ @param {object} params - The request parameters
+{% enddoc %}
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
# platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'profile.manage', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'profile.manage', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403', access_callback: null, anonymous_return_to: null, entity: null
+ # platformos-check-enable DeprecatedTag
# platformos-check-enable UnreachableCode
function object = 'modules/user/commands/profiles/update', object: params, profile: current_profile
- render 'profile/index', errors: object.errors, otp_configured: current_profile.otp_configured
+ render 'profile/index', errors: object.errors, otp_configured: current_profile.otp_configured, current_user: current_profile.user
%}
\ No newline at end of file
diff --git a/pos-module-user/app/views/pages/subscription/index.liquid b/pos-module-user/app/views/pages/subscription/index.liquid
index 7c7d9d9..734c46a 100644
--- a/pos-module-user/app/views/pages/subscription/index.liquid
+++ b/pos-module-user/app/views/pages/subscription/index.liquid
@@ -1,7 +1,9 @@
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
# platformos-check-disable UnreachableCode
- include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'subscription.read', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403'
+ # platformos-check-disable DeprecatedTag
+ include 'modules/user/helpers/can_do_or_unauthorized', requester: current_profile, do: 'subscription.read', redirect_anonymous_to_login: true, forbidden_partial: 'modules/user/components/pages/403', access_callback: null, anonymous_return_to: null, entity: null
+ # platformos-check-enable DeprecatedTag
# platformos-check-enable UnreachableCode
render 'subscription/home/index'
diff --git a/pos-module-user/app/views/partials/admin/home/index.liquid b/pos-module-user/app/views/partials/admin/home/index.liquid
index 346cc41..2c1103b 100644
--- a/pos-module-user/app/views/partials/admin/home/index.liquid
+++ b/pos-module-user/app/views/partials/admin/home/index.liquid
@@ -1,3 +1,6 @@
+{% doc %}
+ @param {object} users - The users collection
+{% enddoc %}
diff --git a/pos-module-user/app/views/partials/profile/index.liquid b/pos-module-user/app/views/partials/profile/index.liquid
index 23565aa..97ce856 100644
--- a/pos-module-user/app/views/partials/profile/index.liquid
+++ b/pos-module-user/app/views/partials/profile/index.liquid
@@ -1,3 +1,8 @@
+{% doc %}
+ @param {object} current_user - The current user object
+ @param {object} errors - The validation errors object
+ @param {boolean} otp_configured - Whether OTP is configured for the user
+{% enddoc %}
{% liquid
function current_profile = 'modules/user/helpers/current_profile'
%}
diff --git a/pos-module-user/modules/common-styling/README.md b/pos-module-user/modules/common-styling/README.md
deleted file mode 100644
index f78e439..0000000
--- a/pos-module-user/modules/common-styling/README.md
+++ /dev/null
@@ -1,161 +0,0 @@
-WIP
-
-This module contains reusable CSS and JS, which is or will be leveraged by [platformOS modules](https://documentation.platformos.com/developer-guide/modules/platformos-modules#our-modules), and which you wil be able to use in your projects. The idea is to provide a consistent and documented way of providing modules which look good from a start and which you can easily customize to fit your needs.
-
-This module follows the [platformOS DevKit best practices](https://documentation.staging.oregon.platform-os.com/developer-guide/modules/platformos-modules).
-
-## Installation
-
-The platformOS Common Styling Module is available on the [Partner Portal Modules Marketplace](https://partners.platformos.com/marketplace/pos_modules/154).
-
-### Prerequisites
-
-Before installing the module, ensure that you have [pos-cli](https://github.com/mdyd-dev/pos-cli#overview) installed. This tool is essential for managing and deploying platformOS projects.
-
-The platformOS Common Styling is fully compatible with [platformOS Check](https://github.com/Platform-OS/platformos-lsp#platformos-check----a-linter-for-platformos), a linter and language server that supports any IDE with Language Server Protocol (LSP) integration. For Visual Studio Code users, you can enhance your development experience by installing the [VSCode platformOS Check Extension](https://marketplace.visualstudio.com/items?itemName=platformOS.platformos-check-vscode).
-
-### Installation Steps
-
-1. **Navigate to your project directory** where you want to install the Common Styling Module.
-
-2. **Run the installation command**:
-
-```bash
- pos-cli modules install common-styling
-```
-
-This command installs the Common Styling Module and updates or creates the `app/pos-modules.json` file in your project directory to track module configurations.
-
-### Setup
-
-1. **Install the module** using the [pos-cli](https://github.com/Platform-OS/pos-cli).
-2. **Import the following CSS files** into your layout's `` section:
-
-```html
-
-
-
-
-
-
-
-
-```
-
-3. **Optionally, import the following CSS reset**. It's not recommended to use in on an existing app probably, but you can safely use it on a fresh one. To use it just place the following CSS reference on top and use a `pos-app` class anywhere on your main content container.
-
-```html
-
-```
-
-## Customizing CSS
-
-When using the `common-styling` module you can easiliy configure the looks of components by overwriting the CSS variables stored in `pos-config.css`. Just copy the variables you need to overwrite to the CSS of your app so they can be overwritten.
-
-When building CSS don't hardcode any (well... probably with some exeptions) color or size. Everything should use CSS variables that are in line with [Figma variables](https://documentation.platformos.com/kits/ui/platformos-design-kit#download). (Pro tip - you can use calc(), from-color() or color-mix() if needed).
-
-
-## Dark mode
-
-There are two base themes provided by default - a light and a dark one. To enable dark mode on your app, please use `.pos-theme-darkEnabled` class on the root `html` tag of your layout. It will switch to dark theme automatically based on the system settings or - if you need to switch manually - please use `.pos-theme-dark` class on the root `html` tag of your layout.
-
-
-## Scoping CSS
-
-When naming your module CSS files, please prefix them with `pos-` for coinsistency.
-
-When naming your CSS classes, please prefix those with `pos-`. We are trying to make sure that the CSS from modules won't interfere with any other CSS that could be used in the project. Keep in mind that the module can be used in various contextes so any styling needs to be scoped just to the module code.
-
-Every CSS is placed inside a `common-styling` CSS layer to lower it's specificity and so that you could always easily overwrite them without having to worry about selectors used.
-
-There are some CSS rules that will be inherited when the parent container has a specific class. Example of`.pos-form` class on a container will style the inputs, buttons and form-related stuff inside the container.
-
-Each component should have it's own separate CSS file.
-
-
-## JavaScript namespace for modules
-
-Use ESM Modules to build JavaScript.
-
-The modules should not pollute the global JavaScript namespace. For this purpose we are using the `pos` namespace attached to global `window` object. Extending the namespace is the preferred way to store all the needed data, translations and module public interface.
-
-There are several basic objects used across the modules that could be extended for consistency. Those are shared across many modules, so **remember not to overwrite them in your code** and extend the objects instead.
-
-| window.pos | Global namespace for all modules-related data. |
-| window.pos.modules | If your module provides a public API then you should attach it to this object namespacing your module accordingly `window.pos.module.myModule = {}` |
-| window.pos.profile | Stores all the profile-related data for currently logged in user. |
-| window.pos.translations | If your JavaScript code needs access to any translations you should append them to this object. |
-
-As an example starting point for defining JavaScript for your module you can use the following code:
-
-```
-
-```
-
-
-## Handling cache with importmaps
-
-When using `import` statement in your JavaScript files, you will request an JS file from the CDN that could be already cached by the browser. PlatformOS handles breaking the cache for assets by using `asset_url` filter. You cannot use it in the JS files though, but the browsers allows you to map any filename to any other URL using [Import Maps](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap). Currently only a single import map on a page can be used and it needs to be defined before any other JS script. (This will change in the near future as multiple import maps are in the works for all the browsers).
-
-An example import map looks like this:
-
-```
-
-```
-
-The first line allows to use relative `import` statements inside your JS files, the last line resets it back to default.
-
-
-## Components
-
-### Toast notifications
-
-1. Render the partial in your application layout (preferably at the very bottom)
-```
-{% liquid
- function flash = 'modules/core/commands/session/get', key: 'sflash'
- if context.location.pathname != flash.from or flash.force_clear
- function _ = 'modules/core/commands/session/clear', key: 'sflash'
- endif
- render 'modules/common-styling/toasts', flash: flash
-%}
-```
-
-From JavaScript you can use:
-```
-new pos.modules.toast('[severity]', '[message]') to show new notification
-```
-
-On the server-side:
-[TO DO]
\ No newline at end of file
diff --git a/pos-module-user/modules/common-styling/public/assets/js/dependency-easyMde.js b/pos-module-user/modules/common-styling/public/assets/js/dependency-easyMde.js
new file mode 100644
index 0000000..45fadc9
--- /dev/null
+++ b/pos-module-user/modules/common-styling/public/assets/js/dependency-easyMde.js
@@ -0,0 +1,7 @@
+/**
+ * easymde v2.20.0
+ * Copyright Jeroen Akkerman
+ * @link https://github.com/ionaru/easy-markdown-editor
+ * @license MIT
+ */
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EasyMDE=e()}}((function(){return function e(t,n,i){function r(a,l){if(!n[a]){if(!t[a]){var s="function"==typeof require&&require;if(!l&&s)return s(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[a]={exports:{}};t[a][0].call(c.exports,(function(e){return r(t[a][1][e]||e)}),c,c.exports,e,t,n,i)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,i=/[*+-]\s/;function r(e,n){var i=n.line,r=0,o=0,a=t.exec(e.getLine(i)),l=a[1];do{var s=i+(r+=1),u=e.getLine(s),c=t.exec(u);if(c){var d=c[1],h=parseInt(a[3],10)+r-o,f=parseInt(c[3],10),p=f;if(l!==d||isNaN(f)){if(l.length>d.length)return;if(l.lengthf&&(p=h+1),e.replaceRange(u.replace(t,d+p+c[4]+c[5]),{line:s,ch:0},{line:s,ch:u.length})}}while(c)}e.commands.newlineAndIndentContinueMarkdownList=function(o){if(o.getOption("disableInput"))return e.Pass;for(var a=o.listSelections(),l=[],s=0;s\s*$/.test(p),x=!/>\s*$/.test(p);(v||x)&&o.replaceRange("",{line:u.line,ch:0},{line:u.line,ch:u.ch+1}),l[s]="\n"}else{var y=m[1],b=m[5],D=!(i.test(m[2])||m[2].indexOf(">")>=0),C=D?parseInt(m[3],10)+1+m[4]:m[2].replace("x"," ");l[s]="\n"+y+C+b,D&&r(o,u)}}o.replaceSelections(l)}})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],7:[function(e,t,n){(function(e){"use strict";e.overlayMode=function(t,n,i){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(i){return{base:e.copyState(t,i.base),overlay:e.copyState(n,i.overlay),basePos:i.basePos,baseCur:null,overlayPos:i.overlayPos,overlayCur:null}},token:function(e,r){return(e!=r.streamSeen||Math.min(r.basePos,r.overlayPos)c);d++){var h=e.getLine(u++);l=null==l?h:l+"\n"+h}s*=2,t.lastIndex=n.ch;var f=t.exec(l);if(f){var p=l.slice(0,f.index).split("\n"),m=f[0].split("\n"),g=n.line+p.length-1,v=p[p.length-1].length;return{from:i(g,v),to:i(g+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:f}}}}function s(e,t,n){for(var i,r=0;r<=e.length;){t.lastIndex=r;var o=t.exec(e);if(!o)break;var a=o.index+o[0].length;if(a>e.length-n)break;(!i||a>i.index+i[0].length)&&(i=o),r=o.index+1}return i}function u(e,t,n){t=r(t,"g");for(var o=n.line,a=n.ch,l=e.firstLine();o>=l;o--,a=-1){var u=e.getLine(o),c=s(u,t,a<0?0:u.length-a);if(c)return{from:i(o,c.index),to:i(o,c.index+c[0].length),match:c}}}function c(e,t,n){if(!o(t))return u(e,t,n);t=r(t,"gm");for(var a,l=1,c=e.getLine(n.line).length-n.ch,d=n.line,h=e.firstLine();d>=h;){for(var f=0;f=h;f++){var p=e.getLine(d--);a=null==a?p:p+"\n"+a}l*=2;var m=s(a,t,c);if(m){var g=a.slice(0,m.index).split("\n"),v=m[0].split("\n"),x=d+g.length,y=g[g.length-1].length;return{from:i(x,y),to:i(x+v.length-1,1==v.length?y+v[0].length:v[v.length-1].length),match:m}}}}function d(e,t,n,i){if(e.length==t.length)return n;for(var r=0,o=n+Math.max(0,e.length-t.length);;){if(r==o)return r;var a=r+o>>1,l=i(e.slice(0,a)).length;if(l==n)return a;l>n?o=a:r=a+1}}function h(e,r,o,a){if(!r.length)return null;var l=a?t:n,s=l(r).split(/\r|\n\r?/);e:for(var u=o.line,c=o.ch,h=e.lastLine()+1-s.length;u<=h;u++,c=0){var f=e.getLine(u).slice(c),p=l(f);if(1==s.length){var m=p.indexOf(s[0]);if(-1==m)continue e;return o=d(f,p,m,l)+c,{from:i(u,d(f,p,m,l)+c),to:i(u,d(f,p,m+s[0].length,l)+c)}}var g=p.length-s[0].length;if(p.slice(g)==s[0]){for(var v=1;v=h;u--,c=-1){var f=e.getLine(u);c>-1&&(f=f.slice(0,c));var p=l(f);if(1==s.length){var m=p.lastIndexOf(s[0]);if(-1==m)continue e;return{from:i(u,d(f,p,m,l)),to:i(u,d(f,p,m+s[0].length,l))}}var g=s[s.length-1];if(p.slice(0,g.length)==g){var v=1;for(o=u-s.length+1;v(this.doc.getLine(n.line)||"").length&&(n.ch=0,n.line++)),0!=e.cmpPos(n,this.doc.clipPos(n))))return this.atOccurrence=!1;var r=this.matches(t,n);if(this.afterEmptyMatch=r&&0==e.cmpPos(r.from,r.to),r)return this.pos=r,this.atOccurrence=!0,this.pos.match||!0;var o=i(t?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:o,to:o},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,n){if(this.atOccurrence){var r=e.splitLines(t);this.doc.replaceRange(r,this.pos.from,this.pos.to,n),this.pos.to=i(this.pos.from.line+r.length-1,r[r.length-1].length+(1==r.length?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",(function(e,t,n){return new p(this.doc,e,t,n)})),e.defineDocExtension("getSearchCursor",(function(e,t,n){return new p(this,e,t,n)})),e.defineExtension("selectMatches",(function(t,n){for(var i=[],r=this.getSearchCursor(t,this.getCursor("from"),n);r.findNext()&&!(e.cmpPos(r.to(),this.getCursor("to"))>0);)i.push({anchor:r.from(),head:r.to()});i.length&&this.setSelections(i,0)}))})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],9:[function(e,t,n){(function(e){"use strict";function t(e){e.state.markedSelection&&e.operation((function(){!function(e){if(!e.somethingSelected())return a(e);if(e.listSelections().length>1)return l(e);var t=e.getCursor("start"),n=e.getCursor("end"),i=e.state.markedSelection;if(!i.length)return o(e,t,n);var s=i[0].find(),u=i[i.length-1].find();if(!s||!u||n.line-t.line<=8||r(t,u.to)>=0||r(n,s.from)<=0)return l(e);for(;r(t,s.from)>0;)i.shift().clear(),s=i[0].find();for(r(t,s.from)<0&&(s.to.line-t.line<8?(i.shift().clear(),o(e,t,s.to,0)):o(e,t,s.from,0));r(n,u.to)<0;)i.pop().clear(),u=i[i.length-1].find();r(n,u.to)>0&&(n.line-u.from.line<8?(i.pop().clear(),o(e,u.from,n)):o(e,u.to,n))}(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){a(e)}))}e.defineOption("styleSelectedText",!1,(function(i,r,o){var s=o&&o!=e.Init;r&&!s?(i.state.markedSelection=[],i.state.markedSelectionStyle="string"==typeof r?r:"CodeMirror-selectedtext",l(i),i.on("cursorActivity",t),i.on("change",n)):!r&&s&&(i.off("cursorActivity",t),i.off("change",n),a(i),i.state.markedSelection=i.state.markedSelectionStyle=null)}));var i=e.Pos,r=e.cmpPos;function o(e,t,n,o){if(0!=r(t,n))for(var a=e.state.markedSelection,l=e.state.markedSelectionStyle,s=t.line;;){var u=s==t.line?t:i(s,0),c=s+8,d=c>=n.line,h=d?n:i(c,0),f=e.markText(u,h,{className:l});if(null==o?a.push(f):a.splice(o++,0,f),d)break;s=c}}function a(e){for(var t=e.state.markedSelection,n=0;n2),v=/Android/.test(e),x=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),D=/win/i.test(t),C=h&&e.match(/Version\/(\d*\.\d*)/);C&&(C=Number(C[1])),C&&C>=15&&(h=!1,s=!0);var w=y&&(u||h&&(null==C||C<12.11)),k=n||a&&l>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var F,A=function(e,t){var n=e.className,i=S(t).exec(n);if(i){var r=n.slice(i.index+i[0].length);e.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function E(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function L(e,t){return E(e).appendChild(t)}function T(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}}g?z=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(z=function(e){try{e.select()}catch(e){}});var j=function(){this.id=null,this.f=null,this.time=0,this.handler=P(this.onTimeout,this)};function q(e,t){for(var n=0;n=t)return i+Math.min(a,t-r);if(r+=o-i,i=o+1,(r+=n-r%n)>=t)return i}}var K=[""];function Z(e){for(;K.length<=e;)K.push(Y(K)+" ");return K[e]}function Y(e){return e[e.length-1]}function Q(e,t){for(var n=[],i=0;i""&&(e.toUpperCase()!=e.toLowerCase()||te.test(e))}function ie(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ne(e))||t.test(e):ne(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var oe=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ae(e){return e.charCodeAt(0)>=768&&oe.test(e)}function le(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var r=(t+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+i}}var ue=null;function ce(e,t,n){var i;ue=null;for(var r=0;rt)return r;o.to==t&&(o.from!=o.to&&"before"==n?i=r:ue=r),o.from==t&&(o.from!=o.to&&"before"!=n?i=r:ue=r)}return null!=i?i:ue}var de=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,i=/[Lb1n]/,r=/[1n]/;function o(e,t,n){this.level=e,this.from=t,this.to=n}return function(a,l){var s="ltr"==l?"L":"R";if(0==a.length||"ltr"==l&&!e.test(a))return!1;for(var u,c=a.length,d=[],h=0;h-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function ve(e,t){var n=me(e,t);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function De(e){e.prototype.on=function(e,t){pe(this,e,t)},e.prototype.off=function(e,t){ge(this,e,t)}}function Ce(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function we(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ke(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){Ce(e),we(e)}function Fe(e){return e.target||e.srcElement}function Ae(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Ee,Le,Te=function(){if(a&&l<9)return!1;var e=T("div");return"draggable"in e||"dragDrop"in e}();function Me(e){if(null==Ee){var t=T("span","");L(e,T("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ee=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&l<8))}var n=Ee?T("span",""):T("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Be(e){if(null!=Le)return Le;var t=L(e,document.createTextNode("AخA")),n=F(t,0,1).getBoundingClientRect(),i=F(t,1,2).getBoundingClientRect();return E(e),!(!n||n.left==n.right)&&(Le=i.right-n.right<3)}var Ne,Oe=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],i=e.length;t<=i;){var r=e.indexOf("\n",t);-1==r&&(r=e.length);var o=e.slice(t,"\r"==e.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=r+1)}return n}:function(e){return e.split(/\r\n?|\n/)},Ie=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},ze="oncopy"in(Ne=T("div"))||(Ne.setAttribute("oncopy","return;"),"function"==typeof Ne.oncopy),He=null;var Re={},Pe={};function _e(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Re[e]=t}function We(e){if("string"==typeof e&&Pe.hasOwnProperty(e))e=Pe[e];else if(e&&"string"==typeof e.name&&Pe.hasOwnProperty(e.name)){var t=Pe[e.name];"string"==typeof t&&(t={name:t}),(e=ee(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return We("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return We("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function je(e,t){t=We(t);var n=Re[t.name];if(!n)return je(e,"text/plain");var i=n(e,t);if(qe.hasOwnProperty(t.name)){var r=qe[t.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=t.name,t.helperType&&(i.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)i[a]=t.modeProps[a];return i}var qe={};function Ue(e,t){_(t,qe.hasOwnProperty(e)?qe[e]:qe[e]={})}function $e(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var i in t){var r=t[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ge(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Ve(e,t,n){return!e.startState||e.startState(t,n)}var Xe=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Ke(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(t=e.first&&tn?it(n,Ke(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?it(e.line,t):n<0?it(e.line,0):e}(t,Ke(e,t.line).text.length)}function dt(e,t){for(var n=[],i=0;i=this.string.length},Xe.prototype.sol=function(){return this.pos==this.lineStart},Xe.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Xe.prototype.next=function(){if(this.post},Xe.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Xe.prototype.skipToEnd=function(){this.pos=this.string.length},Xe.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Xe.prototype.backUp=function(e){this.pos-=e},Xe.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==t&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0},Xe.prototype.current=function(){return this.string.slice(this.start,this.pos)},Xe.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Xe.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Xe.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ht=function(e,t){this.state=e,this.lookAhead=t},ft=function(e,t,n,i){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function pt(e,t,n,i){var r=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,n,(function(e,t){return r.push(e,t)}),o,i);for(var a=n.state,l=function(i){n.baseTokens=r;var l=e.state.overlays[i],s=1,u=0;n.state=!0,wt(e,t.text,l.mode,n,(function(e,t){for(var n=s;ue&&r.splice(s,1,e,r[s+1],i),s+=2,u=Math.min(e,i)}if(t)if(l.opaque)r.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;ne.options.maxHighlightLength&&$e(e.doc.mode,i.state),o=pt(e,t,i);r&&(i.state=r),t.stateAfter=i.save(!r),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function gt(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return new ft(i,!0,t);var o=function(e,t,n){for(var i,r,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Ke(o,l-1),u=s.stateAfter;if(u&&(!n||l+(u instanceof ht?u.lookAhead:0)<=o.modeFrontier))return l;var c=W(s.text,null,e.options.tabSize);(null==r||i>c)&&(r=l-1,i=c)}return r}(e,t,n),a=o>i.first&&Ke(i,o-1).stateAfter,l=a?ft.fromSaved(i,a,o):new ft(i,Ve(i.mode),o);return i.iter(o,t,(function(n){vt(e,n.text,l);var i=l.line;n.stateAfter=i==t-1||i%5==0||i>=r.viewFrom&&it.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ft.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ft.fromSaved=function(e,t,n){return t instanceof ht?new ft(e,$e(e.mode,t.state),n,t.lookAhead):new ft(e,$e(e.mode,t),n)},ft.prototype.save=function(e){var t=!1!==e?$e(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ht(t,this.maxLookAhead):t};var bt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Dt(e,t,n,i){var r,o,a=e.doc,l=a.mode,s=Ke(a,(t=ct(a,t)).line),u=gt(e,t.line,n),c=new Xe(s.text,e.options.tabSize,u);for(i&&(o=[]);(i||c.pose.options.maxHighlightLength?(l=!1,a&&vt(e,t,i,d.pos),d.pos=t.length,s=null):s=Ct(yt(n,d,i.state,h),o),h){var f=h[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!l||c!=s){for(;u=t:o.to>t);(i||(i=[])).push(new Ft(a,o.from,l?null:o.to))}}return i}(n,r,a),s=function(e,t,n){var i;if(e)for(var r=0;r=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&l)for(var y=0;yt)&&(!n||It(n,o.marker)<0)&&(n=o.marker)}return n}function _t(e,t,n,i,r){var o=Ke(e,t),a=St&&o.markedSpans;if(a)for(var l=0;l=0&&d<=0||c<=0&&d>=0)&&(c<=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?rt(u.to,n)>=0:rt(u.to,n)>0)||c>=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?rt(u.from,i)<=0:rt(u.from,i)<0)))return!0}}}function Wt(e){for(var t;t=Ht(e);)e=t.find(-1,!0).line;return e}function jt(e,t){var n=Ke(e,t),i=Wt(n);return n==i?t:Je(i)}function qt(e,t){if(t>e.lastLine())return t;var n,i=Ke(e,t);if(!Ut(e,i))return t;for(;n=Rt(i);)i=n.find(1,!0).line;return Je(i)+1}function Ut(e,t){var n=St&&t.markedSpans;if(n)for(var i=void 0,r=0;rt.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Kt=function(e,t,n){this.text=e,Bt(this,t),this.height=n?n(this):1};function Zt(e){e.parent=null,Mt(e)}Kt.prototype.lineNo=function(){return Je(this)},De(Kt);var Yt={},Qt={};function Jt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Qt:Yt;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function en(e,t){var n=M("span",null,null,s?"padding-right: .1px":null),i={pre:M("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var r=0;r<=(t.rest?t.rest.length:0);r++){var o=r?t.rest[r-1]:t.line,a=void 0;i.pos=0,i.addToken=nn,Be(e.display.measure)&&(a=he(o,e.doc.direction))&&(i.addToken=rn(i.addToken,a)),i.map=[],an(o,i,mt(e,o,t!=e.display.externalMeasured&&Je(o))),o.styleClasses&&(o.styleClasses.bgClass&&(i.bgClass=I(o.styleClasses.bgClass,i.bgClass||"")),o.styleClasses.textClass&&(i.textClass=I(o.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(Me(e.display.measure))),0==r?(t.measure.map=i.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(i.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(s){var l=i.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return ve(e,"renderLine",e,t.line,i.pre),i.pre.className&&(i.textClass=I(i.pre.className,i.textClass||"")),i}function tn(e){var t=T("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function nn(e,t,n,i,r,o,s){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,i="",r=0;ru&&d.from<=u);h++);if(d.to>=c)return e(n,i,r,o,a,l,s);e(n,i.slice(0,d.to-u),r,o,null,l,s),o=null,i=i.slice(d.to-u),u=d.to}}}function on(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!i&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function an(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,l,s,u,c,d,h,f=r.length,p=0,m=1,g="",v=0;;){if(v==p){s=u=c=l="",h=null,d=null,v=1/0;for(var x=[],y=void 0,b=0;bp||C.collapsed&&D.to==p&&D.from==p)){if(null!=D.to&&D.to!=p&&v>D.to&&(v=D.to,u=""),C.className&&(s+=" "+C.className),C.css&&(l=(l?l+";":"")+C.css),C.startStyle&&D.from==p&&(c+=" "+C.startStyle),C.endStyle&&D.to==v&&(y||(y=[])).push(C.endStyle,D.to),C.title&&((h||(h={})).title=C.title),C.attributes)for(var w in C.attributes)(h||(h={}))[w]=C.attributes[w];C.collapsed&&(!d||It(d.marker,C)<0)&&(d=D)}else D.from>p&&v>D.from&&(v=D.from)}if(y)for(var k=0;k=f)break;for(var F=Math.min(f,v);;){if(g){var A=p+g.length;if(!d){var E=A>F?g.slice(0,F-p):g;t.addToken(t,E,a?a+s:s,c,p+E.length==v?u:"",l,h)}if(A>=F){g=g.slice(F-p),p=F;break}p=A,c=""}g=r.slice(o,o=n[m++]),a=Jt(n[m++],t.cm.options)}}else for(var L=1;Ln)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}}function Nn(e,t,n,i){return zn(e,In(e,t),n,i)}function On(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&o.push((s.bottom+u.top)/2-n.top)}}o.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),o=function(e,t,n,i){var r,o=Pn(t.map,n,i),s=o.node,u=o.start,c=o.end,d=o.collapse;if(3==s.nodeType){for(var h=0;h<4;h++){for(;u&&ae(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*i,bottom:t.bottom*i}}(e.display.measure,r))}else{var f;u>0&&(d=i="right"),r=e.options.lineWrapping&&(f=s.getClientRects()).length>1?f["right"==i?f.length-1:0]:s.getBoundingClientRect()}if(a&&l<9&&!u&&(!r||!r.left&&!r.right)){var p=s.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+li(e.display),top:p.top,bottom:p.bottom}:Rn}for(var m=r.top-t.rect.top,g=r.bottom-t.rect.top,v=(m+g)/2,x=t.view.measure.heights,y=0;yt)&&(r=(o=s-l)-1,t>=s&&(a="right")),null!=r){if(i=e[u+2],l==s&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)i=e[2+(u-=3)],a="left";if("right"==n&&r==s-l)for(;u=0&&(n=e[r]).left==n.right;r--);return n}function Wn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=i.text.length?(s=i.text.length,u="before"):s<=0&&(s=0,u="after"),!l)return a("before"==u?s-1:s,"before"==u);function c(e,t,n){return a(n?e-1:e,1==l[t].level!=n)}var d=ce(l,s,u),h=ue,f=c(s,d,"before"==u);return null!=h&&(f.other=c(s,h,"before"!=u)),f}function Yn(e,t){var n=0;t=ct(e.doc,t),e.options.lineWrapping||(n=li(e.display)*t.ch);var i=Ke(e.doc,t.line),r=Gt(i)+Fn(e.display);return{left:n,right:n,top:r,bottom:r+i.height}}function Qn(e,t,n,i,r){var o=it(e,t,n);return o.xRel=r,i&&(o.outside=i),o}function Jn(e,t,n){var i=e.doc;if((n+=e.display.viewOffset)<0)return Qn(i.first,0,null,-1,-1);var r=et(i,n),o=i.first+i.size-1;if(r>o)return Qn(i.first+i.size-1,Ke(i,o).text.length,null,1,1);t<0&&(t=0);for(var a=Ke(i,r);;){var l=ii(e,a,r,t,n),s=Pt(a,l.ch+(l.xRel>0||l.outside>0?1:0));if(!s)return l;var u=s.find(1);if(u.line==r)return u;a=Ke(i,r=u.line)}}function ei(e,t,n,i){i-=Gn(t);var r=t.text.length,o=se((function(t){return zn(e,n,t-1).bottom<=i}),r,0);return{begin:o,end:r=se((function(t){return zn(e,n,t).top>i}),o,r)}}function ti(e,t,n,i){return n||(n=In(e,t)),ei(e,t,n,Vn(e,t,zn(e,n,i),"line").top)}function ni(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}function ii(e,t,n,i,r){r-=Gt(t);var o=In(e,t),a=Gn(t),l=0,s=t.text.length,u=!0,c=he(t,e.doc.direction);if(c){var d=(e.options.lineWrapping?oi:ri)(e,t,n,o,c,i,r);l=(u=1!=d.level)?d.from:d.to-1,s=u?d.to:d.from-1}var h,f,p=null,m=null,g=se((function(t){var n=zn(e,o,t);return n.top+=a,n.bottom+=a,!!ni(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=t,m=n),!0)}),l,s),v=!1;if(m){var x=i-m.left=b.bottom?1:0}return Qn(n,g=le(t.text,g,1),f,v,i-h)}function ri(e,t,n,i,r,o,a){var l=se((function(l){var s=r[l],u=1!=s.level;return ni(Zn(e,it(n,u?s.to:s.from,u?"before":"after"),"line",t,i),o,a,!0)}),0,r.length-1),s=r[l];if(l>0){var u=1!=s.level,c=Zn(e,it(n,u?s.from:s.to,u?"after":"before"),"line",t,i);ni(c,o,a,!0)&&c.top>a&&(s=r[l-1])}return s}function oi(e,t,n,i,r,o,a){var l=ei(e,t,i,a),s=l.begin,u=l.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,d=null,h=0;h=u||f.to<=s)){var p=zn(e,i,1!=f.level?Math.min(u,f.to)-1:Math.max(s,f.from)).right,m=pm)&&(c=f,d=m)}}return c||(c=r[r.length-1]),c.fromu&&(c={from:c.from,to:u,level:c.level}),c}function ai(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hn){Hn=T("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hn.appendChild(document.createTextNode("x")),Hn.appendChild(T("br"));Hn.appendChild(document.createTextNode("x"))}L(e.measure,Hn);var n=Hn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),E(e.measure),n||1}function li(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=T("span","xxxxxxxxxx"),n=T("pre",[t],"CodeMirror-line-like");L(e.measure,n);var i=t.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(e.cachedCharWidth=r),r||10}function si(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var l=e.display.gutterSpecs[a].className;n[l]=o.offsetLeft+o.clientLeft+r,i[l]=o.clientWidth}return{fixedPos:ui(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:t.wrapper.clientWidth}}function ui(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ci(e){var t=ai(e.display),n=e.options.lineWrapping,i=n&&Math.max(5,e.display.scroller.clientWidth/li(e.display)-3);return function(r){if(Ut(e.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a0&&(s=Ke(e.doc,u.line).text).length==u.ch){var c=W(s,s.length,e.options.tabSize)-s.length;u=it(u.line,Math.max(0,Math.round((o-En(e.display).left)/li(e.display))-c))}return u}function fi(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,i=0;it)&&(r.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=r.viewTo)St&&jt(e.doc,t)r.viewFrom?gi(e):(r.viewFrom+=i,r.viewTo+=i);else if(t<=r.viewFrom&&n>=r.viewTo)gi(e);else if(t<=r.viewFrom){var o=vi(e,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):gi(e)}else if(n>=r.viewTo){var a=vi(e,t,t,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):gi(e)}else{var l=vi(e,t,t,-1),s=vi(e,n,n+i,1);l&&s?(r.view=r.view.slice(0,l.index).concat(sn(e,l.lineN,s.lineN)).concat(r.view.slice(s.index)),r.viewTo+=i):gi(e)}var u=r.externalMeasured;u&&(n=r.lineN&&t=i.viewTo)){var o=i.view[fi(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==q(a,n)&&a.push(n)}}}function gi(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function vi(e,t,n,i){var r,o=fi(e,t),a=e.display.view;if(!St||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=e.display.viewFrom,s=0;s0){if(o==a.length-1)return null;r=l+a[o].size-t,o++}else r=l-t;t+=r,n+=r}for(;jt(e.doc,n)!=n;){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function xi(e){for(var t=e.display.view,n=0,i=0;i=e.display.viewTo||s.to().line0?a:e.defaultCharWidth())+"px"}if(i.other){var l=n.appendChild(T("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Ci(e,t){return e.top-t.top||e.left-t.left}function wi(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFragment(),a=En(e.display),l=a.left,s=Math.max(i.sizerWidth,Tn(e)-i.sizer.offsetLeft)-a.right,u="ltr"==r.direction;function c(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),o.appendChild(T("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==n?s-e:n)+"px;\n height: "+(i-t)+"px"))}function d(t,n,i){var o,a,d=Ke(r,t),h=d.text.length;function f(n,i){return Kn(e,it(t,n),"div",d,i)}function p(t,n,i){var r=ti(e,d,null,t),o="ltr"==n==("after"==i)?"left":"right";return f("after"==i?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1),o)[o]}var m=he(d,r.direction);return function(e,t,n,i){if(!e)return i(t,n,"ltr",0);for(var r=!1,o=0;ot||t==n&&a.to==t)&&(i(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(t,n,"ltr")}(m,n||0,null==i?h:i,(function(e,t,r,d){var g="ltr"==r,v=f(e,g?"left":"right"),x=f(t-1,g?"right":"left"),y=null==n&&0==e,b=null==i&&t==h,D=0==d,C=!m||d==m.length-1;if(x.top-v.top<=3){var w=(u?b:y)&&C,k=(u?y:b)&&D?l:(g?v:x).left,S=w?s:(g?x:v).right;c(k,v.top,S-k,v.bottom)}else{var F,A,E,L;g?(F=u&&y&&D?l:v.left,A=u?s:p(e,r,"before"),E=u?l:p(t,r,"after"),L=u&&b&&C?s:x.right):(F=u?p(e,r,"before"):l,A=!u&&y&&D?s:v.right,E=!u&&b&&C?l:x.left,L=u?p(t,r,"after"):s),c(F,v.top,A-F,v.bottom),v.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Ei(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Si(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Ai(e))}function Fi(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Ei(e))}),100)}function Ai(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ve(e,"focus",e,t),e.state.focused=!0,O(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),ki(e))}function Ei(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ve(e,"blur",e,t),e.state.focused=!1,A(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Li(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=Math.max(0,t.scroller.getBoundingClientRect().top),r=t.lineDiv.getBoundingClientRect().top,o=0,s=0;s.005||m<-.005)&&(re.display.sizerWidth){var v=Math.ceil(h/li(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function Ti(e){if(e.widgets)for(var t=0;t=a&&(o=et(t,Gt(Ke(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function Bi(e,t){var n=e.display,i=ai(e.display);t.top<0&&(t.top=0);var r=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=Mn(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+An(n),s=t.topl-i;if(t.topr+o){var c=Math.min(t.top,(u?l:t.bottom)-o);c!=r&&(a.scrollTop=c)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,f=Tn(e)-n.gutters.offsetWidth,p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.leftf+h-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function Ni(e,t){null!=t&&(zi(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Oi(e){zi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ii(e,t,n){null==t&&null==n||zi(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function zi(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Hi(e,Yn(e,t.from),Yn(e,t.to),t.margin))}function Hi(e,t,n,i){var r=Bi(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-i,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+i});Ii(e,r.scrollLeft,r.scrollTop)}function Ri(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||hr(e,{top:t}),Pi(e,t,!0),n&&hr(e),ar(e,100))}function Pi(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function _i(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!i||(e.doc.scrollLeft=t,mr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Wi(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.doc.height+An(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Ln(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var ji=function(e,t,n){this.cm=n;var i=this.vert=T("div",[T("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=T("div",[T("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,e(i),e(r),pe(i,"scroll",(function(){i.clientHeight&&t(i.scrollTop,"vertical")})),pe(r,"scroll",(function(){r.clientWidth&&t(r.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};ji.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?i+"px":"0";var r=e.viewHeight-(t?i:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:t?i:0}},ji.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},ji.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},ji.prototype.zeroWidthHack=function(){var e=y&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new j,this.disableVert=new j},ji.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="",t.set(1e3,(function i(){var r=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,i)}))},ji.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var qi=function(){};function Ui(e,t){t||(t=Wi(e));var n=e.display.barWidth,i=e.display.barHeight;$i(e,t);for(var r=0;r<4&&n!=e.display.barWidth||i!=e.display.barHeight;r++)n!=e.display.barWidth&&e.options.lineWrapping&&Li(e),$i(e,Wi(e)),n=e.display.barWidth,i=e.display.barHeight}function $i(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}qi.prototype.update=function(){return{bottom:0,right:0}},qi.prototype.setScrollLeft=function(){},qi.prototype.setScrollTop=function(){},qi.prototype.clear=function(){};var Gi={native:ji,null:qi};function Vi(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&A(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gi[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),pe(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?_i(e,t):Ri(e,t)}),e),e.display.scrollbars.addClass&&O(e.display.wrapper,e.display.scrollbars.addClass)}var Xi=0;function Ki(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Xi,markArrays:null},t=e.curOp,un?un.ops.push(t):t.ownsGroup=un={ops:[t],delayedCallbacks:[]}}function Zi(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new sr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Qi(e){e.updatedDisplay=e.mustUpdate&&cr(e.cm,e.update)}function Ji(e){var t=e.cm,n=t.display;e.updatedDisplay&&Li(t),e.barMeasure=Wi(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Nn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ln(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Tn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function er(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft1&&(a=!0)),null!=u.scrollLeft&&(_i(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return r}(t,ct(i,e.scrollToPos.from),ct(i,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!xe(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),r=null,o=n.wrapper.ownerDocument;if(t.top+i.top<0?r=!0:t.bottom+i.top>(o.defaultView.innerHeight||o.documentElement.clientHeight)&&(r=!1),null!=r&&!m){var a=T("div","",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Fn(e.display))+"px;\n height: "+(t.bottom-t.top+Ln(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(r),e.display.lineSpace.removeChild(a)}}}(t,r)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var l=0;l=e.display.viewTo)){var n=+new Date+e.options.workTime,i=gt(e,t.highlightFrontier),r=[];t.iter(i.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(i.line>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength?$e(t.mode,i.state):null,s=pt(e,o,i,!0);l&&(i.state=l),o.styles=s.styles;var u=o.styleClasses,c=s.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!d&&hn)return ar(e,e.options.workDelay),!0})),t.highlightFrontier=i.line,t.modeFrontier=Math.max(t.modeFrontier,i.line),r.length&&nr(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==xi(e))return!1;gr(e)&&(gi(e),t.dims=si(e));var r=i.first+i.size,o=Math.max(t.visible.from-e.options.viewportMargin,i.first),a=Math.min(r,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(r,n.viewTo)),St&&(o=jt(e.doc,o),a=qt(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var i=e.display;0==i.view.length||t>=i.viewTo||n<=i.viewFrom?(i.view=sn(e,t,n),i.viewFrom=t):(i.viewFrom>t?i.view=sn(e,t,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,fi(e,n)))),i.viewTo=n}(e,o,a),n.viewOffset=Gt(Ke(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=xi(e);if(!l&&0==u&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=ur(e);return u>4&&(n.lineDiv.style.display="none"),function(e,t,n){var i=e.display,r=e.options.lineNumbers,o=i.lineDiv,a=o.firstChild;function l(t){var n=t.nextSibling;return s&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var u=i.view,c=i.viewFrom,d=0;d-1&&(f=!1),fn(e,h,c,n)),f&&(E(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(nt(e.options,c)))),a=h.node.nextSibling}else{var p=bn(e,h,c,n);o.insertBefore(p,a)}c+=h.size}for(;a;)a=l(a)}(e,n.updateLineNumbers,t.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=N(e.activeElt.ownerDocument)&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&B(document.body,e.anchorNode)&&B(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),i=t.createRange();i.setEnd(e.anchorNode,e.anchorOffset),i.collapse(!1),n.removeAllRanges(),n.addRange(i),n.extend(e.focusNode,e.focusOffset)}}(c),E(n.cursorDiv),E(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ar(e,400)),n.updateLineNumbers=null,!0}function dr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWrapping&&t.oldDisplayWidth!=Tn(e))i&&(t.visible=Mi(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+An(e.display)-Mn(e),n.top)}),t.visible=Mi(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!cr(e,t))break;Li(e);var r=Wi(e);yi(e),Ui(e,r),pr(e,r),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function hr(e,t){var n=new sr(e,t);if(cr(e,n)){Li(e),dr(e,n);var i=Wi(e);yi(e),Ui(e,i),pr(e,i),n.finish()}}function fr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",dn(e,"gutterChanged",e)}function pr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ln(e)+"px"}function mr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var i=ui(t)-t.scroller.scrollLeft+e.doc.scrollLeft,r=t.gutters.offsetWidth,o=i+"px",a=0;a=105&&(o.wrapper.style.clipPath="inset(0px)"),o.wrapper.setAttribute("translate","no"),a&&l<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),s||n&&x||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=vr(r.gutters,r.lineNumbers),xr(o),i.init(o)}sr.prototype.signal=function(e,t){be(e,t)&&this.events.push(arguments)},sr.prototype.finish=function(){for(var e=0;eu.clientWidth,p=u.scrollHeight>u.clientHeight;if(r&&f||o&&p){if(o&&y&&s)e:for(var m=t.target,g=l.view;m!=u;m=m.parentNode)for(var v=0;v=0&&rt(e,i.to())<=0)return n}return-1};var Ar=function(e,t){this.anchor=e,this.head=t};function Er(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort((function(e,t){return rt(e.from(),t.from())})),n=q(t,r);for(var o=1;o0:s>=0){var u=st(l.from(),a.from()),c=lt(l.to(),a.to()),d=l.empty()?a.from()==a.head:l.from()==l.head;o<=n&&--n,t.splice(--o,2,new Ar(d?c:u,d?u:c))}}return new Fr(t,n)}function Lr(e,t){return new Fr([new Ar(e,t||e)],0)}function Tr(e){return e.text?it(e.from.line+e.text.length-1,Y(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Mr(e,t){if(rt(e,t.from)<0)return e;if(rt(e,t.to)<=0)return Tr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,i=e.ch;return e.line==t.to.line&&(i+=Tr(t).ch-t.to.ch),it(n,i)}function Br(e,t){for(var n=[],i=0;i1&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}dn(e,"change",e,t)}function Rr(e,t,n){!function e(i,r,o){if(i.linked)for(var a=0;al-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(qr(e.done),Y(e.done)):e.done.length&&!Y(e.done).ranges?Y(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Y(e.done)):void 0}(r,r.lastOp==i)))a=Y(o.changes),0==rt(t.from,t.to)&&0==rt(t.from,a.to)?a.to=Tr(t):o.changes.push(jr(e,t));else{var s=Y(r.done);for(s&&s.ranges||Gr(e.sel,r.done),o={changes:[jr(e,t)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=l,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=t.origin,a||ve(e,"historyAdded")}function $r(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||function(e,t,n,i){var r=t.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,Y(r.done),t))?r.done[r.done.length-1]=t:Gr(t,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&qr(r.undone)}function Gr(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Vr(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,i),(function(n){n.markedSpans&&((r||(r=t["spans_"+e.id]={}))[o]=n.markedSpans),++o}))}function Xr(e){if(!e)return null;for(var t,n=0;n-1&&(Y(l)[d]=u[d],delete u[d])}}}return i}function Yr(e,t,n,i){if(i){var r=e.anchor;if(n){var o=rt(t,r)<0;o!=rt(n,r)<0?(r=t,t=n):o!=rt(t,n)<0&&(t=n)}return new Ar(r,t)}return new Ar(n||t,t)}function Qr(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend)),io(e,new Fr([Yr(e.sel.primary(),t,n,r)],0),i)}function Jr(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:l.to>t.ch))){if(r&&(ve(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var d=s.find(i<0?1:-1),h=void 0;if((i<0?c:u)&&(d=co(e,d,-i,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(h=rt(d,n))&&(i<0?h<0:h>0))return so(e,d,t,i,r)}var f=s.find(i<0?-1:1);return(i<0?u:c)&&(f=co(e,f,i,f.line==t.line?o:null)),f?so(e,f,t,i,r):null}}return t}function uo(e,t,n,i,r){var o=i||1,a=so(e,t,n,o,r)||!r&&so(e,t,n,o,!0)||so(e,t,n,-o,r)||!r&&so(e,t,n,-o,!0);return a||(e.cantEdit=!0,it(e.first,0))}function co(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?ct(e,it(t.line-1)):null:n>0&&t.ch==(i||Ke(e,t.line)).text.length?t.line0)){var c=[s,1],d=rt(u.from,l.from),h=rt(u.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&c.push({from:u.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&c.push({from:l.to,to:u.to}),r.splice.apply(r,c),s+=c.length-3}}return r}(e,t.from,t.to);if(i)for(var r=i.length-1;r>=0;--r)mo(e,{from:i[r].from,to:i[r].to,text:r?[""]:t.text,origin:t.origin});else mo(e,t)}}function mo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=rt(t.from,t.to)){var n=Br(e,t);Ur(e,t,n,e.cm?e.cm.curOp.id:NaN),xo(e,t,n,Lt(e,t));var i=[];Rr(e,(function(e,n){n||-1!=q(i,e.history)||(Co(e.history,t),i.push(e.history)),xo(e,t,null,Lt(e,t))}))}}function go(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(var r,o=e.history,a=e.sel,l="undo"==t?o.done:o.undone,s="undo"==t?o.undone:o.done,u=0;u=0;--f){var p=h(f);if(p)return p.v}}}}function vo(e,t){if(0!=t&&(e.first+=t,e.sel=new Fr(Q(e.sel.ranges,(function(e){return new Ar(it(e.anchor.line+t,e.anchor.ch),it(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){pi(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,i=n.viewFrom;ie.lastLine())){if(t.from.lineo&&(t={from:t.from,to:it(o,Ke(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ze(e,t.from,t.to),n||(n=Br(e,t)),e.cm?function(e,t,n){var i=e.doc,r=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=Je(Wt(Ke(i,o.line))),i.iter(s,a.line+1,(function(e){if(e==r.maxLine)return l=!0,!0})));i.sel.contains(t.from,t.to)>-1&&ye(e);Hr(i,t,n,ci(e)),e.options.lineWrapping||(i.iter(s,o.line+t.text.length,(function(e){var t=Vt(e);t>r.maxLineLength&&(r.maxLine=e,r.maxLineLength=t,r.maxLineChanged=!0,l=!1)})),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;i--){var r=Ke(e,i).stateAfter;if(r&&(!(r instanceof ht)||i+r.lookAhead1||!(this.children[0]instanceof ko))){var l=[];this.collapse(l),this.children=[new ko(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=r.lines.length%25+25,l=a;l10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var i=0;i0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=M("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(_t(e,t.line,t,n,o)||t.line!=n.line&&_t(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");St=!0}o.addToHistory&&Ur(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,u=e.cm;if(e.iter(s,n.line+1,(function(i){u&&o.collapsed&&!u.options.lineWrapping&&Wt(i)==u.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&Qe(i,0),function(e,t,n){var i=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));i&&e.markedSpans&&i.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],i&&i.add(e.markedSpans)),t.marker.attachLine(e)}(i,new Ft(o,s==t.line?t.ch:null,s==n.line?n.ch:null),e.cm&&e.cm.curOp),++s})),o.collapsed&&e.iter(t.line,n.line+1,(function(t){Ut(e,t)&&Qe(t,0)})),o.clearOnEnter&&pe(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(kt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++Eo,o.atomic=!0),u){if(l&&(u.curOp.updateMaxLine=!0),o.collapsed)pi(u,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=n.line;c++)mi(u,c,"text");o.atomic&&ao(u.doc),dn(u,"markerAdded",u,o)}return o}Lo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Ki(e),be(this,"clear")){var n=this.find();n&&dn(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=i&&e&&this.collapsed&&pi(e,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&ao(e.doc)),e&&dn(e,"markerCleared",e,this,i,r),t&&Zi(e),this.parent&&this.parent.clear()}},Lo.prototype.find=function(e,t){var n,i;null==e&&"bookmark"==this.type&&(e=1);for(var r=0;r=0;s--)po(this,i[s]);l?no(this,l):this.cm&&Oi(this.cm)})),undo:or((function(){go(this,"undo")})),redo:or((function(){go(this,"redo")})),undoSelection:or((function(){go(this,"undo",!0)})),redoSelection:or((function(){go(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,i=0;i=e.ch)&&t.push(r.marker.parent||r.marker)}return t},findMarks:function(e,t,n){e=ct(this,e),t=ct(this,t);var i=[],r=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var l=0;l=s.to||null==s.from&&r!=e.line||null!=s.from&&r==t.line&&s.from>=t.ch||n&&!n(s.marker)||i.push(s.marker.parent||s.marker)}++r})),i},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var i=0;ie)return t=e,!0;e-=o,++n})),ct(this,it(n,t))},indexFromPos:function(e){var t=(e=ct(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),ro(t.doc,Lr(n,n)),h)for(var f=0;f=0;t--)yo(e.doc,"",i[t].from,i[t].to,"+delete");Oi(e)}))}function na(e,t,n){var i=le(e.text,t+n,n);return i<0||i>e.text.length?null:i}function ia(e,t,n){var i=na(e,t.ch,n);return null==i?null:new it(t.line,i,n<0?"after":"before")}function ra(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=he(n,t.doc.direction);if(o){var a,l=r<0?Y(o):o[0],s=r<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var u=In(t,n);a=r<0?n.text.length-1:0;var c=zn(t,u,a).top;a=se((function(e){return zn(t,u,e).top==c}),r<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=na(n,a,1))}else a=r<0?l.to:l.from;return new it(i,a,s)}}return new it(i,r<0?n.text.length:0,r<0?"before":"after")}Vo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Vo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Vo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Vo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Vo.default=y?Vo.macDefault:Vo.pcDefault;var oa={selectAll:ho,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),$)},killLine:function(e){return ta(e,(function(t){if(t.empty()){var n=Ke(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)r=new it(r.line,r.ch+1),e.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),it(r.line,r.ch-2),r,"+transpose");else if(r.line>e.doc.first){var a=Ke(e.doc,r.line-1).text;a&&(r=new it(r.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),it(r.line-1,a.length-1),r,"+transpose"))}n.push(new Ar(r,r))}e.setSelections(n)}))},newlineAndIndent:function(e){return nr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var i=0;i-1&&(rt((r=u.ranges[r]).from(),t)<0||t.xRel>0)&&(rt(r.to(),t)>0||t.xRel<0)?function(e,t,n,i){var r=e.display,o=!1,u=ir(e,(function(t){s&&(r.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Fi(e)),ge(r.wrapper.ownerDocument,"mouseup",u),ge(r.wrapper.ownerDocument,"mousemove",c),ge(r.scroller,"dragstart",d),ge(r.scroller,"drop",u),o||(Ce(t),i.addNew||Qr(e.doc,n,null,null,i.extend),s&&!f||a&&9==l?setTimeout((function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()}),20):r.input.focus())})),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};s&&(r.scroller.draggable=!0);e.state.draggingText=u,u.copy=!i.moveOnDrag,pe(r.wrapper.ownerDocument,"mouseup",u),pe(r.wrapper.ownerDocument,"mousemove",c),pe(r.scroller,"dragstart",d),pe(r.scroller,"drop",u),e.state.delayingBlurEvent=!0,setTimeout((function(){return r.input.focus()}),20),r.scroller.dragDrop&&r.scroller.dragDrop()}(e,i,t,o):function(e,t,n,i){a&&Fi(e);var r=e.display,o=e.doc;Ce(t);var l,s,u=o.sel,c=u.ranges;i.addNew&&!i.extend?(s=o.sel.contains(n),l=s>-1?c[s]:new Ar(n,n)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==i.unit)i.addNew||(l=new Ar(n,n)),n=hi(e,t,!0,!0),s=-1;else{var d=Da(e,n,i.unit);l=i.extend?Yr(l,d.anchor,d.head,i.extend):d}i.addNew?-1==s?(s=c.length,io(o,Er(e,c.concat([l]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==i.unit&&!i.extend?(io(o,Er(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),u=o.sel):eo(o,s,l,G):(s=0,io(o,new Fr([l],0),G),u=o.sel);var h=n;function f(t){if(0!=rt(h,t))if(h=t,"rectangle"==i.unit){for(var r=[],a=e.options.tabSize,c=W(Ke(o,n.line).text,n.ch,a),d=W(Ke(o,t.line).text,t.ch,a),f=Math.min(c,d),p=Math.max(c,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Ke(o,m).text,x=X(v,f,a);f==p?r.push(new Ar(it(m,x),it(m,x))):v.length>x&&r.push(new Ar(it(m,x),it(m,X(v,p,a))))}r.length||r.push(new Ar(n,n)),io(o,Er(e,u.ranges.slice(0,s).concat(r),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var y,b=l,D=Da(e,t,i.unit),C=b.anchor;rt(D.anchor,C)>0?(y=D.head,C=st(b.from(),D.anchor)):(y=D.anchor,C=lt(b.to(),D.head));var w=u.ranges.slice(0);w[s]=function(e,t){var n=t.anchor,i=t.head,r=Ke(e.doc,n.line);if(0==rt(n,i)&&n.sticky==i.sticky)return t;var o=he(r);if(!o)return t;var a=ce(o,n.ch,n.sticky),l=o[a];if(l.from!=n.ch&&l.to!=n.ch)return t;var s,u=a+(l.from==n.ch==(1!=l.level)?0:1);if(0==u||u==o.length)return t;if(i.line!=n.line)s=(i.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ce(o,i.ch,i.sticky),d=c-a||(i.ch-n.ch)*(1==l.level?-1:1);s=c==u-1||c==u?d<0:d>0}var h=o[u+(s?-1:0)],f=s==(1==h.level),p=f?h.from:h.to,m=f?"after":"before";return n.ch==p&&n.sticky==m?t:new Ar(new it(n.line,p,m),i)}(e,new Ar(ct(o,C),y)),io(o,Er(e,w,s),G)}}var p=r.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=hi(e,t,!0,"rectangle"==i.unit);if(a)if(0!=rt(a,h)){e.curOp.focus=N(H(e)),f(a);var l=Mi(r,o);(a.line>=l.to||a.linep.bottom?20:0;s&&setTimeout(ir(e,(function(){m==n&&(r.scroller.scrollTop+=s,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(Ce(t),r.input.focus()),ge(r.wrapper.ownerDocument,"mousemove",x),ge(r.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var x=ir(e,(function(e){0!==e.buttons&&Ae(e)?g(e):v(e)})),y=ir(e,v);e.state.selectingText=y,pe(r.wrapper.ownerDocument,"mousemove",x),pe(r.wrapper.ownerDocument,"mouseup",y)}(e,i,t,o)}(t,i,o,e):Fe(e)==n.scroller&&Ce(e):2==r?(i&&Qr(t.doc,i),setTimeout((function(){return n.input.focus()}),20)):3==r&&(k?t.display.input.onContextMenu(e):Fi(t)))}}function Da(e,t,n){if("char"==n)return new Ar(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Ar(it(t.line,0),ct(e.doc,it(t.line+1,0)));var i=n(e,t);return new Ar(i.from,i.to)}function Ca(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.touches[0].clientY;else try{r=t.clientX,o=t.clientY}catch(e){return!1}if(r>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;i&&Ce(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!be(e,n))return ke(t);o-=l.top-a.viewOffset;for(var s=0;s=r)return ve(e,n,e,et(e.doc,o),e.display.gutterSpecs[s].className,t),ke(t)}}function wa(e,t){return Ca(e,t,"gutterClick",!0)}function ka(e,t){Sn(e.display,t)||function(e,t){if(!be(e,"gutterContextMenu"))return!1;return Ca(e,t,"gutterContextMenu",!1)}(e,t)||xe(e,t,"contextmenu")||k||e.display.input.onContextMenu(t)}function Sa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),qn(e)}ya.prototype.compare=function(e,t,n){return this.time+400>e&&0==rt(t,this.pos)&&n==this.button};var Fa={toString:function(){return"CodeMirror.Init"}},Aa={},Ea={};function La(e,t,n){if(!t!=!(n&&n!=Fa)){var i=e.display.dragFunctions,r=t?pe:ge;r(e.display.scroller,"dragstart",i.start),r(e.display.scroller,"dragenter",i.enter),r(e.display.scroller,"dragover",i.over),r(e.display.scroller,"dragleave",i.leave),r(e.display.scroller,"drop",i.drop)}}function Ta(e){e.options.lineWrapping?(O(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(A(e.display.wrapper,"CodeMirror-wrap"),Xt(e)),di(e),pi(e),qn(e),setTimeout((function(){return Ui(e)}),100)}function Ma(e,t){var n=this;if(!(this instanceof Ma))return new Ma(e,t);this.options=t=t?_(t):{},_(Aa,t,!1);var i=t.value;"string"==typeof i?i=new Io(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var r=new Ma.inputStyles[t.inputStyle](this),o=this.display=new br(e,i,r,t);for(var u in o.wrapper.CodeMirror=this,Sa(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Vi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new j,keySeq:null,specialChars:null},t.autofocus&&!x&&o.input.focus(),a&&l<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;pe(t.scroller,"mousedown",ir(e,ba)),pe(t.scroller,"dblclick",a&&l<11?ir(e,(function(t){if(!xe(e,t)){var n=hi(e,t);if(n&&!wa(e,t)&&!Sn(e.display,t)){Ce(t);var i=e.findWordAt(n);Qr(e.doc,i.anchor,i.head)}}})):function(t){return xe(e,t)||Ce(t)});pe(t.scroller,"contextmenu",(function(t){return ka(e,t)})),pe(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||ka(e,n)}));var n,i={end:0};function r(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(i=t.activeTouch).end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function s(e,t){if(null==t.left)return!0;var n=t.left-e.left,i=t.top-e.top;return n*n+i*i>400}pe(t.scroller,"touchstart",(function(r){if(!xe(e,r)&&!o(r)&&!wa(e,r)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-i.end<=300?i:null},1==r.touches.length&&(t.activeTouch.left=r.touches[0].pageX,t.activeTouch.top=r.touches[0].pageY)}})),pe(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),pe(t.scroller,"touchend",(function(n){var i=t.activeTouch;if(i&&!Sn(t,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var o,a=e.coordsChar(t.activeTouch,"page");o=!i.prev||s(i,i.prev)?new Ar(a,a):!i.prev.prev||s(i,i.prev.prev)?e.findWordAt(a):new Ar(it(a.line,0),ct(e.doc,it(a.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),Ce(n)}r()})),pe(t.scroller,"touchcancel",r),pe(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Ri(e,t.scroller.scrollTop),_i(e,t.scroller.scrollLeft,!0),ve(e,"scroll",e))})),pe(t.scroller,"mousewheel",(function(t){return Sr(e,t)})),pe(t.scroller,"DOMMouseScroll",(function(t){return Sr(e,t)})),pe(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){xe(e,t)||Se(t)},over:function(t){xe(e,t)||(!function(e,t){var n=hi(e,t);if(n){var i=document.createDocumentFragment();Di(e,n,i),e.display.dragCursor||(e.display.dragCursor=T("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),L(e.display.dragCursor,i)}}(e,t),Se(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-zo<100))Se(t);else if(!xe(e,t)&&!Sn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var n=T("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}(e,t)},drop:ir(e,Ho),leave:function(t){xe(e,t)||Ro(e)}};var u=t.input.getField();pe(u,"keyup",(function(t){return ma.call(e,t)})),pe(u,"keydown",ir(e,pa)),pe(u,"keypress",ir(e,ga)),pe(u,"focus",(function(t){return Ai(e,t)})),pe(u,"blur",(function(t){return Ei(e,t)}))}(this),Wo(),Ki(this),this.curOp.forceUpdate=!0,Pr(this,i),t.autofocus&&!x||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Ai(n)}),20):Ei(this),Ea)Ea.hasOwnProperty(u)&&Ea[u](this,t[u],Fa);gr(this),t.finishInit&&t.finishInit(this);for(var c=0;c150)){if(!i)return;n="prev"}}else u=0,n="not";"prev"==n?u=t>o.first?W(Ke(o,t-1).text,null,a):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(u/a);f;--f)h+=a,d+="\t";if(ha,s=Oe(t),u=null;if(l&&i.ranges.length>1)if(Oa&&Oa.text.join("\n")==t){if(i.ranges.length%Oa.text.length==0){u=[];for(var c=0;c=0;h--){var f=i.ranges[h],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=it(p.line,p.ch-n):e.state.overwrite&&!l?m=it(m.line,Math.min(Ke(o,m.line).text.length,m.ch+Y(s).length)):l&&Oa&&Oa.lineWise&&Oa.text.join("\n")==s.join("\n")&&(p=m=it(p.line,0)));var g={from:p,to:m,text:u?u[h%u.length]:s,origin:r||(l?"paste":e.state.cutIncoming>a?"cut":"+input")};po(e.doc,g),dn(e,"inputRead",e,g)}t&&!l&&Ra(e,t),Oi(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ha(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||nr(t,(function(){return za(t,n,0,null,"paste")})),!0}function Ra(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=e.getModeAt(r.head),a=!1;if(o.electricChars){for(var l=0;l-1){a=Na(e,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Ke(e.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Na(e,r.head.line,"smart"));a&&dn(e,"electricInput",e,r.head.line)}}}function Pa(e){for(var t=[],n=[],i=0;i0?0:-1));if(isNaN(c))a=null;else{var d=n>0?c>=55296&&c<56320:c>=56320&&c<57343;a=new it(t.line,Math.max(0,Math.min(l.text.length,t.ch+n*(d?2:1))),-n)}}else a=r?function(e,t,n,i){var r=he(t,e.doc.direction);if(!r)return ia(t,n,i);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=ce(r,n.ch,n.sticky),a=r[o];if("ltr"==e.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from=a.from&&h>=c.begin)){var f=d?"before":"after";return new it(n.line,h,f)}}var p=function(e,t,i){for(var o=function(e,t){return t?new it(n.line,s(e,1),"before"):new it(n.line,e,"after")};e>=0&&e0==(1!=a.level),u=l?i.begin:s(i.end,-1);if(a.from<=u&&u0?c.end:s(c.begin,-1);return null==g||i>0&&g==t.text.length||!(m=p(i>0?0:r.length-1,i,u(g)))?null:m}(e.cm,l,t,n):ia(l,t,n);if(null==a){if(o||(u=t.line+s)=e.first+e.size||(t=new it(u,t.ch,t.sticky),!(l=Ke(e,u))))return!1;t=ra(r,e.cm,l,t.line,s)}else t=a;return!0}if("char"==i||"codepoint"==i)u();else if("column"==i)u(!0);else if("word"==i||"group"==i)for(var c=null,d="group"==i,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(n<0)||u(!f);f=!1){var p=l.text.charAt(t.ch)||"\n",m=ie(p,h)?"w":d&&"\n"==p?"n":!d||/\s/.test(p)?null:"p";if(!d||f||m||(m="s"),c&&c!=m){n<0&&(n=1,u(),t.sticky="after");break}if(m&&(c=m),n>0&&!u(!f))break}var g=uo(e,t,o,a,!0);return ot(o,g)&&(g.hitSide=!0),g}function qa(e,t,n,i){var r,o,a=e.doc,l=t.left;if("page"==i){var s=Math.min(e.display.wrapper.clientHeight,R(e).innerHeight||a(e).documentElement.clientHeight),u=Math.max(s-.5*ai(e.display),3);r=(n>0?t.bottom:t.top)+n*u}else"line"==i&&(r=n>0?t.bottom+3:t.top-3);for(;(o=Jn(e,l,r)).outside;){if(n<0?r<=0:r>=a.height){o.hitSide=!0;break}r+=5*n}return o}var Ua=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new j,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function $a(e,t){var n=On(e,t.line);if(!n||n.hidden)return null;var i=Ke(e.doc,t.line),r=Bn(n,i,t.line),o=he(i,e.doc.direction),a="left";o&&(a=ce(o,t.ch)%2?"right":"left");var l=Pn(r.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Ga(e,t){return t&&(e.bad=!0),e}function Va(e,t,n){var i;if(t==e.display.lineDiv){if(!(i=e.display.lineDiv.childNodes[n]))return Ga(e.clipPos(it(e.display.viewTo-1)),!0);t=null,n=0}else for(i=t;;i=i.parentNode){if(!i||i==e.display.lineDiv)return null;if(i.parentNode&&i.parentNode==e.display.lineDiv)break}for(var r=0;r=t.display.viewTo||o.line=t.display.viewFrom&&$a(t,r)||{node:s[0].measure.map[2],offset:0},c=o.linei.firstLine()&&(a=it(a.line-1,Ke(i.doc,a.line-1).length)),l.ch==Ke(i.doc,l.line).text.length&&l.liner.viewTo-1)return!1;a.line==r.viewFrom||0==(e=fi(i,a.line))?(t=Je(r.view[0].line),n=r.view[0].node):(t=Je(r.view[e].line),n=r.view[e-1].node.nextSibling);var s,u,c=fi(i,l.line);if(c==r.view.length-1?(s=r.viewTo-1,u=r.lineDiv.lastChild):(s=Je(r.view[c+1].line)-1,u=r.view[c+1].node.previousSibling),!n)return!1;for(var d=i.doc.splitLines(function(e,t,n,i,r){var o="",a=!1,l=e.doc.lineSeparator(),s=!1;function u(e){return function(t){return t.id==e}}function c(){a&&(o+=l,s&&(o+=l),a=s=!1)}function d(e){e&&(c(),o+=e)}function h(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(it(i,0),it(r+1,0),u(+f));return void(p.length&&(o=p[0].find(0))&&d(Ze(e.doc,o.from,o.to).join(l)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&c();for(var g=0;g1&&h.length>1;)if(Y(d)==Y(h))d.pop(),h.pop(),s--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}for(var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);fa.ch&&x.charCodeAt(x.length-p-1)==y.charCodeAt(y.length-p-1);)f--,p++;d[d.length-1]=x.slice(0,x.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var D=it(t,f),C=it(s,h.length?Y(h).length-p:0);return d.length>1||d[0]||rt(D,C)?(yo(i.doc,d,D,C,"+input"),!0):void 0},Ua.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ua.prototype.reset=function(){this.forceCompositionEnd()},Ua.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ua.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Ua.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||nr(this.cm,(function(){return pi(e.cm)}))},Ua.prototype.setUneditable=function(e){e.contentEditable="false"},Ua.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ir(this.cm,za)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Ua.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Ua.prototype.onContextMenu=function(){},Ua.prototype.resetPosition=function(){},Ua.prototype.needsContentAttribute=!0;var Ka=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new j,this.hasSelection=!1,this.composing=null,this.resetting=!1};Ka.prototype.init=function(e){var t=this,n=this,i=this.cm;this.createField(e);var r=this.textarea;function o(e){if(!xe(i,e)){if(i.somethingSelected())Ia({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Pa(i);Ia({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,$):(n.prevInput="",r.value=t.text.join("\n"),z(r))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(r.style.width="0px"),pe(r,"input",(function(){a&&l>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),pe(r,"paste",(function(e){xe(i,e)||Ha(e,i)||(i.state.pasteIncoming=+new Date,n.fastPoll())})),pe(r,"cut",o),pe(r,"copy",o),pe(e.scroller,"paste",(function(t){if(!Sn(e,t)&&!xe(i,t)){if(!r.dispatchEvent)return i.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,r.dispatchEvent(o)}})),pe(e.lineSpace,"selectstart",(function(t){Sn(e,t)||Ce(t)})),pe(r,"compositionstart",(function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}})),pe(r,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Ka.prototype.createField=function(e){this.wrapper=Wa(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;_a(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},Ka.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Ka.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,i=bi(e);if(e.options.moveInputWithCursor){var r=Zn(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},Ka.prototype.showSelection=function(e){var t=this.cm.display;L(t.cursorDiv,e.cursors),L(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ka.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&z(this.textarea),a&&l>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&l>=9&&(this.hasSelection=null));this.resetting=!1}},Ka.prototype.getField=function(){return this.textarea},Ka.prototype.supportsTouch=function(){return!1},Ka.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!x||N(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(e){}},Ka.prototype.blur=function(){this.textarea.blur()},Ka.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ka.prototype.receivedFocus=function(){this.slowPoll()},Ka.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Ka.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Ka.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||Ie(n)&&!i&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var r=n.value;if(r==i&&!t.somethingSelected())return!1;if(a&&l>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i=""),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,u=Math.min(i.length,r.length);s1e3||r.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=r,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Ka.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ka.prototype.onKeyPress=function(){a&&l>=9&&(this.hasSelection=null),this.fastPoll()},Ka.prototype.onContextMenu=function(e){var t=this,n=t.cm,i=n.display,r=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=hi(n,e),u=i.scroller.scrollTop;if(o&&!h){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(o)&&ir(n,io)(n.doc,Lr(o),$);var c,d=r.style.cssText,f=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",s&&(c=r.ownerDocument.defaultView.scrollY),i.input.focus(),s&&r.ownerDocument.defaultView.scrollTo(null,c),i.input.reset(),n.somethingSelected()||(r.value=t.prevInput=" "),t.contextMenuPending=v,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),a&&l>=9&&g(),k){Se(e);var m=function(){ge(window,"mouseup",m),setTimeout(v,20)};pe(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=r.selectionStart){var e=n.somethingSelected(),o=""+(e?r.value:"");r.value="⇚",r.value=o,t.prevInput=e?"":"",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=f,r.style.cssText=d,a&&l<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=u),null!=r.selectionStart)){(!a||a&&l<9)&&g();var e=0,o=function(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&""==t.prevInput?ir(n,ho)(n):e++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},Ka.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Ka.prototype.setUneditable=function(){},Ka.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=Fa&&r(e,t,n)}:r)}e.defineOption=n,e.Init=Fa,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,Or(e)}),!0),n("indentUnit",2,Or,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){Ir(e),qn(e),pi(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],i=e.doc.first;e.doc.iter((function(e){for(var r=0;;){var o=e.text.indexOf(t,r);if(-1==o)break;r=o+t.length,n.push(it(i,o))}i++}));for(var r=n.length-1;r>=0;r--)yo(e.doc,t,n[r],it(n[r].line,n[r].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=Fa&&e.refresh()})),n("specialCharPlaceholder",tn,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",x?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!D),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){Sa(e),yr(e)}),!0),n("keyMap","default",(function(e,t,n){var i=ea(t),r=n!=Fa&&ea(n);r&&r.detach&&r.detach(e,i),i.attach&&i.attach(e,r||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Ta,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=vr(t,e.options.lineNumbers),yr(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?ui(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Ui(e)}),!0),n("scrollbarStyle","native",(function(e){Vi(e),Ui(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=vr(e.options.gutters,t),yr(e)}),!0),n("firstLineNumber",1,yr,!0),n("lineNumberFormatter",(function(e){return e}),yr,!0),n("showCursorWhenSelecting",!1,yi,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Ei(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,La),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,yi,!0),n("singleCursorHeightPerLine",!0,yi,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Ir,!0),n("addModeClass",!1,Ir,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,Ir,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(Ma),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){R(this).focus(),this.display.input.focus()},setOption:function(e,n){var i=this.options,r=i[e];i[e]==n&&"mode"!=e||(i[e]=n,t.hasOwnProperty(e)&&ir(this,t[e])(this,n,r),ve(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ea(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Na(this,r.head.line,e,!0),n=r.head.line,i==this.doc.sel.primIndex&&Oi(this));else{var o=r.from(),a=r.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s0&&eo(this.doc,i,new Ar(o,u[i].to()),$)}}})),getTokenAt:function(e,t){return Dt(this,e,t)},getLineTokens:function(e,t){return Dt(this,it(e),t,!0)},getTokenTypeAt:function(e){e=ct(this.doc,e);var t,n=mt(this,Ke(this.doc,e.line)),i=0,r=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]o&&(e=o,r=!0),i=Ke(this.doc,e)}else i=e;return Vn(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-Gt(i):0)},defaultTextHeight:function(){return ai(this.display)},defaultCharWidth:function(){return li(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,i,r){var o,a,l,s=this.display,u=(e=Zn(this,ct(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==i)u=e.top;else if("above"==i||"near"==i){var d=Math.max(s.wrapper.clientHeight,this.doc.height),h=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==i||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(u=e.bottom),c+t.offsetWidth>h&&(c=h-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==r?(c=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==r?c=0:"middle"==r&&(c=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),n&&(o=this,a={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(l=Bi(o,a)).scrollTop&&Ri(o,l.scrollTop),null!=l.scrollLeft&&_i(o,l.scrollLeft))},triggerOnKeyDown:rr(pa),triggerOnKeyPress:rr(ga),triggerOnKeyUp:ma,triggerOnMouseDown:rr(ba),execCommand:function(e){if(oa.hasOwnProperty(e))return oa[e].call(null,this)},triggerElectric:rr((function(e){Ra(this,e)})),findPosH:function(e,t,n,i){var r=1;t<0&&(r=-1,t=-t);for(var o=ct(this.doc,e),a=0;a0&&a(t.charAt(n-1));)--n;for(;i.5||this.options.lineWrapping)&&di(this),ve(this,"refresh",this)})),swapDoc:rr((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Pr(this,e),qn(this),this.display.input.reset(),Ii(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,dn(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},De(e),e.registerHelper=function(t,i,r){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][i]=r},e.registerGlobalHelper=function(t,i,r,o){e.registerHelper(t,i,o),n[t]._global.push({pred:r,val:o})}}(Ma);var Za="iter insert remove copy getEditor constructor".split(" ");for(var Ya in Io.prototype)Io.prototype.hasOwnProperty(Ya)&&q(Za,Ya)<0&&(Ma.prototype[Ya]=function(e){return function(){return e.apply(this.doc,arguments)}}(Io.prototype[Ya]));return De(Io),Ma.inputStyles={textarea:Ka,contenteditable:Ua},Ma.defineMode=function(e){Ma.defaults.mode||"null"==e||(Ma.defaults.mode=e),_e.apply(this,arguments)},Ma.defineMIME=function(e,t){Pe[e]=t},Ma.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Ma.defineMIME("text/plain","null"),Ma.defineExtension=function(e,t){Ma.prototype[e]=t},Ma.defineDocExtension=function(e,t){Io.prototype[e]=t},Ma.fromTextArea=function(e,t){if((t=t?_(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=N(e.ownerDocument);t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function i(){e.value=l.getValue()}var r;if(e.form&&(pe(e.form,"submit",i),!t.leaveSubmitMethodAlone)){var o=e.form;r=o.submit;try{var a=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(n){n.save=i,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,i(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(ge(e.form,"submit",i),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=r))}},e.style.display="none";var l=Ma((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return l},function(e){e.off=ge,e.on=pe,e.wheelEventPixels=kr,e.Doc=Io,e.splitLines=Oe,e.countColumn=W,e.findColumn=X,e.isWordChar=ne,e.Pass=U,e.signal=ve,e.Line=Kt,e.changeEnd=Tr,e.scrollbarModel=Gi,e.Pos=it,e.cmpPos=rt,e.modes=Re,e.mimeModes=Pe,e.resolveMode=We,e.getMode=je,e.modeExtensions=qe,e.extendMode=Ue,e.copyState=$e,e.startState=Ve,e.innerMode=Ge,e.commands=oa,e.keyMap=Vo,e.keyName=Jo,e.isModifierKey=Yo,e.lookupKey=Zo,e.normalizeKeyMap=Ko,e.StringStream=Xe,e.SharedTextMarker=Mo,e.TextMarker=Lo,e.LineWidget=Fo,e.e_preventDefault=Ce,e.e_stopPropagation=we,e.e_stop=Se,e.addClass=O,e.contains=B,e.rmClass=A,e.keyNames=qo}(Ma),Ma.version="5.65.15",Ma}))},{}],11:[function(e,t,n){var i;i=function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",(function(n,i){var r=0,o={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var o=e.pos;e.eatWhile("`");var a=1+e.pos-o;return n.code?a===r&&(n.code=!1):(r=a,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==i.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},a={taskLists:!0,strikethrough:!0,emoji:!0};for(var l in i)a[l]=i[l];return a.name="markdown",e.overlayMode(e.getMode(n,a),o)}),"markdown"),e.defineMIME("text/x-gfm","gfm")},"object"==typeof n&&"object"==typeof t?i(e("../../lib/codemirror"),e("../markdown/markdown"),e("../../addon/mode/overlay")):i(CodeMirror)},{"../../addon/mode/overlay":7,"../../lib/codemirror":10,"../markdown/markdown":12}],12:[function(e,t,n){var i;i=function(e){"use strict";e.defineMode("markdown",(function(t,n){var i=e.getMode(t,"text/html"),r="null"==i.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.fencedCodeBlockDefaultMode&&(n.fencedCodeBlockDefaultMode="text/plain"),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var o={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var a in o)o.hasOwnProperty(a)&&n.tokenTypeOverrides[a]&&(o[a]=n.tokenTypeOverrides[a]);var l=/^([*\-_])(?:\s*\1){2,}\s*$/,s=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,u=/^\[(x| )\](?=\s)/i,c=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,d=/^ {0,3}(?:\={1,}|-{2,})\s*$/,h=/^[^#!\[\]*_\\<>` "'(~:]+/,f=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,p=/^\s*\[[^\]]+?\]:.*$/,m=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function g(e,t,n){return t.f=t.inline=n,n(e,t)}function v(e,t,n){return t.f=t.block=n,n(e,t)}function x(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==b){var n=r;if(!n){var o=e.innerMode(i,t.htmlState);n="xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText}n&&(t.f=k,t.block=y,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function y(i,r){var a,h=i.column()===r.indentation,m=!(a=r.prevLine.stream)||!/\S/.test(a.string),v=r.indentedCode,x=r.prevLine.hr,y=!1!==r.list,b=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var w=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,y)){for(r.list=null;w=4&&(v||r.prevLine.fencedCodeEnd||r.prevLine.header||m))return i.skipToEnd(),r.indentedCode=!0,o.code;if(i.eatSpace())return null;if(h&&r.indentation<=b&&(F=i.match(c))&&F[1].length<=6)return r.quote=0,r.header=F[1].length,r.thisLine.header=!0,n.highlightFormatting&&(r.formatting="header"),r.f=r.inline,C(r);if(r.indentation<=b&&i.eat(">"))return r.quote=h?1:r.quote+1,n.highlightFormatting&&(r.formatting="quote"),i.eatSpace(),C(r);if(!S&&!r.setext&&h&&r.indentation<=b&&(F=i.match(s))){var A=F[1]?"ol":"ul";return r.indentation=w+i.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,n.taskLists&&i.match(u,!1)&&(r.taskList=!0),r.f=r.inline,n.highlightFormatting&&(r.formatting=["list","list-"+A]),C(r)}return h&&r.indentation<=b&&(F=i.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(F[1]+"+ *$"),r.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var i=e.findModeByName(n);i&&(n=i.mime||i.mimes[0])}var r=e.getMode(t,n);return"null"==r.name?null:r}(F[2]||n.fencedCodeBlockDefaultMode),r.localMode&&(r.localState=e.startState(r.localMode)),r.f=r.block=D,n.highlightFormatting&&(r.formatting="code-block"),r.code=-1,C(r)):r.setext||!(k&&y||r.quote||!1!==r.list||r.code||S||p.test(i.string))&&(F=i.lookAhead(1))&&(F=F.match(d))?(r.setext?(r.header=r.setext,r.setext=0,i.skipToEnd(),n.highlightFormatting&&(r.formatting="header")):(r.header="="==F[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,C(r)):S?(i.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,o.hr):"["===i.peek()?g(i,r,E):g(i,r,r.inline)}function b(t,n){var o=i.token(t,n.htmlState);if(!r){var a=e.innerMode(i,n.htmlState);("xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=k,n.block=y,n.htmlState=null)}return o}function D(e,t){var i,r=t.listStack[t.listStack.length-1]||0,a=t.indentation=e.quote?t.push(o.formatting+"-"+e.formatting[i]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(o.linkHref,"url"):(e.strong&&t.push(o.strong),e.em&&t.push(o.em),e.strikethrough&&t.push(o.strikethrough),e.emoji&&t.push(o.emoji),e.linkText&&t.push(o.linkText),e.code&&t.push(o.code),e.image&&t.push(o.image),e.imageAltText&&t.push(o.imageAltText,"link"),e.imageMarker&&t.push(o.imageMarker)),e.header&&t.push(o.header,o.header+"-"+e.header),e.quote&&(t.push(o.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(o.quote+"-"+e.quote):t.push(o.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var r=(e.listStack.length-1)%3;r?1===r?t.push(o.list2):t.push(o.list3):t.push(o.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function w(e,t){if(e.match(h,!0))return C(t)}function k(t,r){var a=r.text(t,r);if(void 0!==a)return a;if(r.list)return r.list=null,C(r);if(r.taskList)return" "===t.match(u,!0)[1]?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,C(r);if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"),C(r);var l=t.next();if(r.linkTitle){r.linkTitle=!1;var s=l;"("===l&&(s=")");var c="^\\s*(?:[^"+(s=(s+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+s;if(t.match(new RegExp(c),!0))return o.linkHref}if("`"===l){var d=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var h=t.current().length;if(0!=r.code||r.quote&&1!=h){if(h==r.code){var f=C(r);return r.code=0,f}return r.formatting=d,C(r)}return r.code=h,C(r)}if(r.code)return C(r);if("\\"===l&&(t.next(),n.highlightFormatting)){var p=C(r),g=o.formatting+"-escape";return p?p+" "+g:g}if("!"===l&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return r.imageMarker=!0,r.image=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("["===l&&r.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("]"===l&&r.imageAltText){n.highlightFormatting&&(r.formatting="image");var p=C(r);return r.imageAltText=!1,r.image=!1,r.inline=r.f=F,p}if("["===l&&!r.image)return r.linkText&&t.match(/^.*?\]/)||(r.linkText=!0,n.highlightFormatting&&(r.formatting="link")),C(r);if("]"===l&&r.linkText){n.highlightFormatting&&(r.formatting="link");var p=C(r);return r.linkText=!1,r.inline=r.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?F:k,p}if("<"===l&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkInline;if("<"===l&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkEmail;if(n.xml&&"<"===l&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var x=t.string.indexOf(">",t.pos);if(-1!=x){var y=t.string.substring(t.start,x);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(y)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(i),v(t,r,b)}if(n.xml&&"<"===l&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";if("*"===l||"_"===l){for(var D=1,w=1==t.pos?" ":t.string.charAt(t.pos-2);D<3&&t.eat(l);)D++;var A=t.peek()||" ",E=!/\s/.test(A)&&(!m.test(A)||/\s/.test(w)||m.test(w)),L=!/\s/.test(w)&&(!m.test(w)||/\s/.test(A)||m.test(A)),T=null,M=null;if(D%2&&(r.em||!E||"*"!==l&&L&&!m.test(w)?r.em!=l||!L||"*"!==l&&E&&!m.test(A)||(T=!1):T=!0),D>1&&(r.strong||!E||"*"!==l&&L&&!m.test(w)?r.strong!=l||!L||"*"!==l&&E&&!m.test(A)||(M=!1):M=!0),null!=M||null!=T)return n.highlightFormatting&&(r.formatting=null==T?"strong":null==M?"em":"strong em"),!0===T&&(r.em=l),!0===M&&(r.strong=l),f=C(r),!1===T&&(r.em=!1),!1===M&&(r.strong=!1),f}else if(" "===l&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return C(r);t.backUp(1)}if(n.strikethrough)if("~"===l&&t.eatWhile(l)){if(r.strikethrough)return n.highlightFormatting&&(r.formatting="strikethrough"),f=C(r),r.strikethrough=!1,f;if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),C(r)}else if(" "===l&&t.match("~~",!0)){if(" "===t.peek())return C(r);t.backUp(2)}if(n.emoji&&":"===l&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){r.emoji=!0,n.highlightFormatting&&(r.formatting="emoji");var B=C(r);return r.emoji=!1,B}return" "===l&&(t.match(/^ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),C(r)}function S(e,t){if(">"===e.next()){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link");var i=C(t);return i?i+=" ":i="",i+o.linkInline}return e.match(/^[^>]+/,!0),o.linkInline}function F(e,t){if(e.eatSpace())return null;var i,r=e.next();return"("===r||"["===r?(t.f=t.inline=(i="("===r?")":"]",function(e,t){if(e.next()===i){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link-string");var r=C(t);return t.linkHref=!1,r}return e.match(A[i]),t.linkHref=!0,C(t)}),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,C(t)):"error"}var A={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function E(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=L,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,C(t)):g(e,t,k)}function L(e,t){if(e.match("]:",!0)){t.f=t.inline=T,n.highlightFormatting&&(t.formatting="link");var i=C(t);return t.linkText=!1,i}return e.match(/^([^\]\\]|\\.)+/,!0),o.linkText}function T(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/,!0),t.f=t.inline=k,o.linkHref+" url")}var M={startState:function(){return{f:y,prevLine:{stream:null},thisLine:{stream:null},block:y,htmlState:null,indentation:0,inline:k,text:w,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(i,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return x(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=b)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==b?{state:e.htmlState,mode:i}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:M}},indent:function(t,n,r){return t.block==b&&i.indent?i.indent(t.htmlState,n,r):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,r):e.Pass},blankLine:x,getType:C,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return M}),"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")},"object"==typeof n&&"object"==typeof t?i(e("../../lib/codemirror"),e("../xml/xml"),e("../meta")):i(CodeMirror)},{"../../lib/codemirror":10,"../meta":13,"../xml/xml":14}],13:[function(e,t,n){(function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var t=0;t-1&&t.substring(r+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n")):null:e.match("--")?n(f("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(p(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=f("meta","?>"),"meta"):(o=e.eat("/")?"closeTag":"openTag",t.tokenize=h,"tag bracket"):"&"==i?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function h(e,t){var n,i,r=e.next();if(">"==r||"/"==r&&e.eat(">"))return t.tokenize=d,o=">"==r?"endTag":"selfcloseTag","tag bracket";if("="==r)return o="equals",null;if("<"==r){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null;var a=t.tokenize(e,t);return a?a+" tag error":"tag error"}return/[\'\"]/.test(r)?(t.tokenize=(n=r,i=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=h;break}return"string"},i.isInAttribute=!0,i),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(e,t){return function(n,i){for(;!n.eol();){if(n.match(t)){i.tokenize=d;break}n.next()}return e}}function p(e){return function(t,n){for(var i;null!=(i=t.next());){if("<"==i)return n.tokenize=p(e+1),n.tokenize(t,n);if(">"==i){if(1==e){n.tokenize=d;break}return n.tokenize=p(e-1),n.tokenize(t,n)}}return"meta"}}function m(e){return e&&e.toLowerCase()}function g(e,t,n){this.prev=e.context,this.tagName=t||"",this.indent=e.indented,this.startOfLine=n,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function v(e){e.context&&(e.context=e.context.prev)}function x(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!s.contextGrabbers.hasOwnProperty(m(n))||!s.contextGrabbers[m(n)].hasOwnProperty(m(t)))return;v(e)}}function y(e,t,n){return"openTag"==e?(n.tagStart=t.column(),b):"closeTag"==e?D:y}function b(e,t,n){return"word"==e?(n.tagName=t.current(),a="tag",k):s.allowMissingTagName&&"endTag"==e?(a="tag bracket",k(e,0,n)):(a="error",b)}function D(e,t,n){if("word"==e){var i=t.current();return n.context&&n.context.tagName!=i&&s.implicitlyClosed.hasOwnProperty(m(n.context.tagName))&&v(n),n.context&&n.context.tagName==i||!1===s.matchClosing?(a="tag",C):(a="tag error",w)}return s.allowMissingTagName&&"endTag"==e?(a="tag bracket",C(e,0,n)):(a="error",w)}function C(e,t,n){return"endTag"!=e?(a="error",C):(v(n),y)}function w(e,t,n){return a="error",C(e,0,n)}function k(e,t,n){if("word"==e)return a="attribute",S;if("endTag"==e||"selfcloseTag"==e){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(m(i))?x(n,i):(x(n,i),n.context=new g(n,i,r==n.indented)),y}return a="error",k}function S(e,t,n){return"equals"==e?F:(s.allowMissing||(a="error"),k(e,0,n))}function F(e,t,n){return"string"==e?A:"word"==e&&s.allowUnquoted?(a="string",k):(a="error",k(e,0,n))}function A(e,t,n){return"string"==e?A:k(e,0,n)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:y,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;o=null;var n=t.tokenize(e,t);return(n||o)&&"comment"!=n&&(a=null,t.state=t.state(o||n,e,t),a&&(n="error"==a?n+" error":a)),n},indent:function(t,n,i){var r=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(r&&r.noIndent)return e.Pass;if(t.tokenize!=h&&t.tokenize!=d)return i?i.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==s.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==F&&(e.state=k)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],15:[function(e,t,n){!function(e,i){"object"==typeof n&&void 0!==t?i(n):i((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.defaults={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var o=/[&<>"']/,a=/[&<>"']/g,l=/[<>"']|&(?!#?\w+;)/,s=/[<>"']|&(?!#?\w+;)/g,u={"&":"&","<":"<",">":">",'"':""","'":"'"},c=function(e){return u[e]};function d(e,t){if(t){if(o.test(e))return e.replace(a,c)}else if(l.test(e))return e.replace(s,c);return e}var h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function f(e){return e.replace(h,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var p=/(^|[^\[])\^/g;function m(e,t){e="string"==typeof e?e:e.source,t=t||"";var n={replace:function(t,i){return i=(i=i.source||i).replace(p,"$1"),e=e.replace(t,i),n},getRegex:function(){return new RegExp(e,t)}};return n}var g=/[^\w:]/g,v=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function x(e,t,n){if(e){var i;try{i=decodeURIComponent(f(n)).replace(g,"").toLowerCase()}catch(e){return null}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:")||0===i.indexOf("data:"))return null}t&&!v.test(n)&&(n=function(e,t){y[" "+e]||(b.test(e)?y[" "+e]=e+"/":y[" "+e]=F(e,"/",!0));var n=-1===(e=y[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(D,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(C,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}var y={},b=/^[^:]+:\/*[^/]*$/,D=/^([^:]+:)[\s\S]*$/,C=/^([^:]+:\/*[^/]*)[\s\S]*$/;var w={exec:function(){}};function k(e){for(var t,n,i=1;i=0&&"\\"===n[r];)i=!i;return i?"|":" |"})).split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else for(;n.length1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}function L(e,t,n,i){var r=t.href,o=t.title?d(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){i.state.inLink=!0;var l={type:"link",raw:n,href:r,title:o,text:a,tokens:i.inlineTokens(a)};return i.state.inLink=!1,l}return{type:"image",raw:n,href:r,title:o,text:d(a)}}var T=function(){function t(t){this.options=t||e.defaults}var n=t.prototype;return n.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},n.code=function(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:F(n,"\n")}}},n.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],i=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var i=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=i.length?e.slice(i.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:i}}},n.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var i=F(n,"#");this.options.pedantic?n=i.trim():i&&!/ $/.test(i)||(n=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}},n.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},n.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *>[ \t]?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(n,[]),text:n}}},n.list=function(e){var t=this.rules.block.list.exec(e);if(t){var n,r,o,a,l,s,u,c,d,h,f,p,m=t[1].trim(),g=m.length>1,v={type:"list",raw:"",ordered:g,start:g?+m.slice(0,-1):"",loose:!1,items:[]};m=g?"\\d{1,9}\\"+m.slice(-1):"\\"+m,this.options.pedantic&&(m=g?m:"[*+-]");for(var x=new RegExp("^( {0,3}"+m+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(p=!1,t=x.exec(e))&&!this.rules.block.hr.test(e);){if(n=t[0],e=e.substring(n.length),c=t[2].split("\n",1)[0],d=e.split("\n",1)[0],this.options.pedantic?(a=2,f=c.trimLeft()):(a=(a=t[2].search(/[^ ]/))>4?1:a,f=c.slice(a),a+=t[1].length),s=!1,!c&&/^ *$/.test(d)&&(n+=d+"\n",e=e.substring(d.length+1),p=!0),!p)for(var y=new RegExp("^ {0,"+Math.min(3,a-1)+"}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"),b=new RegExp("^ {0,"+Math.min(3,a-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),D=new RegExp("^ {0,"+Math.min(3,a-1)+"}(?:```|~~~)"),C=new RegExp("^ {0,"+Math.min(3,a-1)+"}#");e&&(c=h=e.split("\n",1)[0],this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!D.test(c))&&!C.test(c)&&!y.test(c)&&!b.test(e);){if(c.search(/[^ ]/)>=a||!c.trim())f+="\n"+c.slice(a);else{if(s)break;f+="\n"+c}s||c.trim()||(s=!0),n+=h+"\n",e=e.substring(h.length+1)}v.loose||(u?v.loose=!0:/\n *\n *$/.test(n)&&(u=!0)),this.options.gfm&&(r=/^\[[ xX]\] /.exec(f))&&(o="[ ] "!==r[0],f=f.replace(/^\[[ xX]\] +/,"")),v.items.push({type:"list_item",raw:n,task:!!r,checked:o,loose:!1,text:f}),v.raw+=n}v.items[v.items.length-1].raw=n.trimRight(),v.items[v.items.length-1].text=f.trimRight(),v.raw=v.raw.trimRight();var w=v.items.length;for(l=0;l1)return!0}return!1}));!v.loose&&k.length&&S&&(v.loose=!0,v.items[l].loose=!0)}return v}},n.html=function(e){var t=this.rules.block.html.exec(e);if(t){var n={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};if(this.options.sanitize){var i=this.options.sanitizer?this.options.sanitizer(t[0]):d(t[0]);n.type="paragraph",n.text=i,n.tokens=this.lexer.inline(i)}return n}},n.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},n.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:S(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var i,r,o,a,l=n.align.length;for(i=0;i/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):d(t[0]):t[0]}},n.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;var i=F(n.slice(0,-1),"\\");if((n.length-i.length)%2==0)return}else{var r=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,i=0,r=0;r-1){var o=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,o).trim(),t[3]=""}}var a=t[2],l="";if(this.options.pedantic){var s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(a);s&&(a=s[1],l=s[3])}else l=t[3]?t[3].slice(1,-1):"";return a=a.trim(),/^$/.test(n)?a.slice(1):a.slice(1,-1)),L(t,{href:a?a.replace(this.rules.inline._escapes,"$1"):a,title:l?l.replace(this.rules.inline._escapes,"$1"):l},t[0],this.lexer)}},n.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var i=(n[2]||n[1]).replace(/\s+/g," ");if(!(i=t[i.toLowerCase()])||!i.href){var r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return L(n,i,n[0],this.lexer)}},n.emStrong=function(e,t,n){void 0===n&&(n="");var i=this.rules.inline.emStrong.lDelim.exec(e);if(i&&(!i[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=i[1]||i[2]||"";if(!r||r&&(""===n||this.rules.inline.punctuation.exec(n))){var o,a,l=i[0].length-1,s=l,u=0,c="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+l);null!=(i=c.exec(t));)if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6])if(a=o.length,i[3]||i[4])s+=a;else if(!((i[5]||i[6])&&l%3)||(l+a)%3){if(!((s-=a)>0)){if(a=Math.min(a,a+s+u),Math.min(l,a)%2){var d=e.slice(1,l+i.index+a);return{type:"em",raw:e.slice(0,l+i.index+a+1),text:d,tokens:this.lexer.inlineTokens(d)}}var h=e.slice(2,l+i.index+a-1);return{type:"strong",raw:e.slice(0,l+i.index+a+1),text:h,tokens:this.lexer.inlineTokens(h)}}}else u+=a}}},n.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),i=/[^ ]/.test(n),r=/^ /.test(n)&&/ $/.test(n);return i&&r&&(n=n.substring(1,n.length-1)),n=d(n,!0),{type:"codespan",raw:t[0],text:n}}},n.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},n.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},n.autolink=function(e,t){var n,i,r=this.rules.inline.autolink.exec(e);if(r)return i="@"===r[2]?"mailto:"+(n=d(this.options.mangle?t(r[1]):r[1])):n=d(r[1]),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}},n.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var i,r;if("@"===n[2])r="mailto:"+(i=d(this.options.mangle?t(n[0]):n[0]));else{var o;do{o=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(o!==n[0]);i=d(n[0]),r="www."===n[1]?"http://"+i:i}return{type:"link",raw:n[0],text:i,href:r,tokens:[{type:"text",raw:i,text:i}]}}},n.inlineText=function(e,t){var n,i=this.rules.inline.text.exec(e);if(i)return n=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):d(i[0]):i[0]:d(this.options.smartypants?t(i[0]):i[0]),{type:"text",raw:i[0],text:n}},t}(),M={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^\s>]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:w,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};M.def=m(M.def).replace("label",M._label).replace("title",M._title).getRegex(),M.bullet=/(?:[*+-]|\d{1,9}[.)])/,M.listItemStart=m(/^( *)(bull) */).replace("bull",M.bullet).getRegex(),M.list=m(M.list).replace(/bull/g,M.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+M.def.source+")").getRegex(),M._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",M._comment=/|$)/,M.html=m(M.html,"i").replace("comment",M._comment).replace("tag",M._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),M.paragraph=m(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.blockquote=m(M.blockquote).replace("paragraph",M.paragraph).getRegex(),M.normal=k({},M),M.gfm=k({},M.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),M.gfm.table=m(M.gfm.table).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.gfm.paragraph=m(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",M.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.pedantic=k({},M.normal,{html:m("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)| \\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",M._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:w,paragraph:m(M.normal._paragraph).replace("hr",M.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",M.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:w,tag:"^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:w,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),i+=""+n+";";return i}B._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",B.punctuation=m(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/\\\*|\\_/g,B._comment=m(M._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),B.emStrong.lDelim=m(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=m(B.emStrong.rDelimAst,"g").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=m(B.emStrong.rDelimUnd,"g").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=m(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=m(B.tag).replace("comment",B._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=m(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=m(B.reflink).replace("label",B._label).replace("ref",M._label).getRegex(),B.nolink=m(B.nolink).replace("ref",M._label).getRegex(),B.reflinkSearch=m(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=k({},B),B.pedantic=k({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:m(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:m(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=k({},B.normal,{escape:m(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?t.push(n):(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(i.raw+="\n"+n.raw,i.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else if(r=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,n=e.slice(1),i=void 0;a.options.extensions.startBlock.forEach((function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),this.state.top&&(n=this.tokenizer.paragraph(r)))i=t[t.length-1],o&&"paragraph"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n),o=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n);else if(e){var l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}throw new Error(l)}return this.state.top=!0,t},a.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},a.inlineTokens=function(e,t){var n,i,r,o=this;void 0===t&&(t=[]);var a,l,s,u=e;if(this.tokens.links){var c=Object.keys(this.tokens.links);if(c.length>0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(u));)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(u));)u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.escapedEmSt.exec(u));)u=u.slice(0,a.index)+"++"+u.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(l||(s=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(i){return!!(n=i.call({lexer:o},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)}))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,u,s))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e,O))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e,O))){if(r=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,n=e.slice(1),i=void 0;o.options.extensions.startInline.forEach((function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),n=this.tokenizer.inlineText(r,N))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(s=n.raw.slice(-1)),l=!0,(i=t[t.length-1])&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(e){var d="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else e=e.substring(n.raw.length),t.push(n);return t},i=n,o=[{key:"rules",get:function(){return{block:M,inline:B}}}],(r=null)&&t(i.prototype,r),o&&t(i,o),Object.defineProperty(i,"prototype",{writable:!1}),n}(),z=function(){function t(t){this.options=t||e.defaults}var n=t.prototype;return n.code=function(e,t,n){var i=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,i);null!=r&&r!==e&&(n=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",i?''+(n?e:d(e,!0))+" \n":""+(n?e:d(e,!0))+" \n"},n.blockquote=function(e){return"\n"+e+" \n"},n.html=function(e){return e},n.heading=function(e,t,n,i){return this.options.headerIds?"\n":""+e+" \n"},n.hr=function(){return this.options.xhtml?" \n":" \n"},n.list=function(e,t,n){var i=t?"ol":"ul";return"<"+i+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+""+i+">\n"},n.listitem=function(e){return""+e+" \n"},n.checkbox=function(e){return" "},n.paragraph=function(e){return""+e+"
\n"},n.table=function(e,t){return t&&(t=""+t+" "),"\n"},n.tablerow=function(e){return"\n"+e+" \n"},n.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+""+n+">\n"},n.strong=function(e){return""+e+" "},n.em=function(e){return""+e+" "},n.codespan=function(e){return""+e+""},n.br=function(){return this.options.xhtml?" ":" "},n.del=function(e){return""+e+""},n.link=function(e,t,n){if(null===(e=x(this.options.sanitize,this.options.baseUrl,e)))return n;var i='"+n+" "},n.image=function(e,t,n){if(null===(e=x(this.options.sanitize,this.options.baseUrl,e)))return n;var i=' ":">"},n.text=function(e){return e},t}(),H=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),R=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var n=e,i=0;if(this.seen.hasOwnProperty(n)){i=this.seen[e];do{n=e+"-"+ ++i}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=i,this.seen[n]=0),n},t.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),P=function(){function t(t){this.options=t||e.defaults,this.options.renderer=this.options.renderer||new z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new H,this.slugger=new R}t.parse=function(e,n){return new t(n).parse(e)},t.parseInline=function(e,n){return new t(n).parseInline(e)};var n=t.prototype;return n.parse=function(e,t){void 0===t&&(t=!0);var n,i,r,o,a,l,s,u,c,d,h,p,m,g,v,x,y,b,D,C="",w=e.length;for(n=0;n0&&"paragraph"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):g+=b),g+=this.parse(v.tokens,m),c+=this.renderer.listitem(g,y,x);C+=this.renderer.list(c,h,p);continue;case"html":C+=this.renderer.html(d.text);continue;case"paragraph":C+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(c=d.tokens?this.parseInline(d.tokens):d.text;n+1An error occurred:"+d(e.message+"",!0)+" ";throw e}try{var s=I.lex(e,t);if(t.walkTokens){if(t.async)return Promise.all(_.walkTokens(s,t.walkTokens)).then((function(){return P.parse(s,t)})).catch(l);_.walkTokens(s,t.walkTokens)}return P.parse(s,t)}catch(e){l(e)}}_.options=_.setOptions=function(t){var n;return k(_.defaults,t),n=_.defaults,e.defaults=n,_},_.getDefaults=r,_.defaults=e.defaults,_.use=function(){for(var e=arguments.length,t=new Array(e),n=0;nAn error occurred:"+d(e.message+"",!0)+" ";throw e}},_.Parser=P,_.parser=P.parse,_.Renderer=z,_.TextRenderer=H,_.Lexer=I,_.lexer=I.lex,_.Tokenizer=T,_.Slugger=R,_.parse=_;var W=_.options,j=_.setOptions,q=_.use,U=_.walkTokens,$=_.parseInline,G=_,V=P.parse,X=I.lex;e.Lexer=I,e.Parser=P,e.Renderer=z,e.Slugger=R,e.TextRenderer=H,e.Tokenizer=T,e.getDefaults=r,e.lexer=X,e.marked=_,e.options=W,e.parse=G,e.parseInline=$,e.parser=V,e.setOptions=j,e.use=q,e.walkTokens=U,Object.defineProperty(e,"__esModule",{value:!0})}))},{}],16:[function(e,t,n){(function(n){(function(){var i;!function(){"use strict";(i=function(e,t,i,r){r=r||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=r.flags||{},this.memoized={},this.loaded=!1;var o,a,l,s,u,c=this;function d(e,t){var n=c._readFile(e,null,r.asyncLoad);r.asyncLoad?n.then((function(e){t(e)})):t(n)}function h(e){t=e,i&&p()}function f(e){i=e,t&&p()}function p(){for(c.rules=c._parseAFF(t),c.compoundRuleCodes={},a=0,s=c.compoundRules.length;a0&&(b.continuationClasses=x),"."!==y&&(b.match="SFX"===d?new RegExp(y+"$"):new RegExp("^"+y)),"0"!=m&&(b.remove="SFX"===d?new RegExp(m+"$"):m),p.push(b)}s[h]={type:d,combineable:"Y"==f,entries:p},r+=n}else if("COMPOUNDRULE"===d){for(o=r+1,l=r+1+(n=parseInt(c[1],10));o0&&(null===n[e]&&(n[e]=[]),n[e].push(t))}for(var r=1,o=t.length;r1){var u=this.parseRuleCodes(l[1]);"NEEDAFFIX"in this.flags&&-1!=u.indexOf(this.flags.NEEDAFFIX)||i(s,u);for(var c=0,d=u.length;c=this.flags.COMPOUNDMIN)for(t=0,n=this.compoundRules.length;t1&&c[1][1]!==c[1][0]&&(o=c[0]+c[1][1]+c[1][0]+c[1].substring(2),t&&!l.check(o)||(o in a?a[o]+=1:a[o]=1)),c[1]){var d=c[1].substring(0,1).toUpperCase()===c[1].substring(0,1)?"uppercase":"lowercase";for(i=0;ii?1:t[0].localeCompare(e[0])})).reverse();var u=[],c="lowercase";e.toUpperCase()===e?c="uppercase":e.substr(0,1).toUpperCase()+e.substr(1).toLowerCase()===e&&(c="capitalized");var d=t;for(n=0;n)+?/g),s={toggleBold:x,toggleItalic:y,drawLink:O,toggleHeadingSmaller:w,toggleHeadingBigger:k,drawImage:I,toggleBlockquote:C,toggleOrderedList:B,toggleUnorderedList:M,toggleCodeBlock:D,togglePreview:U,toggleStrikethrough:b,toggleHeading1:S,toggleHeading2:F,toggleHeading3:A,toggleHeading4:E,toggleHeading5:L,toggleHeading6:T,cleanBlock:N,drawTable:P,drawHorizontalRule:_,undo:W,redo:j,toggleSideBySide:q,toggleFullScreen:v},u={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",toggleHeading1:"Ctrl+Alt+1",toggleHeading2:"Ctrl+Alt+2",toggleHeading3:"Ctrl+Alt+3",toggleHeading4:"Ctrl+Alt+4",toggleHeading5:"Ctrl+Alt+5",toggleHeading6:"Ctrl+Alt+6",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},c=function(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))&&(t=!0),t};function d(e){return e=a?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function h(e,t,n,i){var r=f(e,!1,t,n,"button",i);r.classList.add("easymde-dropdown"),r.onclick=function(){r.focus()};var o=document.createElement("div");o.className="easymde-dropdown-content";for(var a=0;a0){for(var g=document.createElement("i"),v=0;v=0&&!n(h=s.getLineHandle(o));o--);var g,v,x,y,b=i(s.getTokenAt({line:o,ch:1})).fencedChars;n(s.getLineHandle(u.line))?(g="",v=u.line):n(s.getLineHandle(u.line-1))?(g="",v=u.line-1):(g=b+"\n",v=u.line),n(s.getLineHandle(c.line))?(x="",y=c.line,0===c.ch&&(y+=1)):0!==c.ch&&n(s.getLineHandle(c.line+1))?(x="",y=c.line+1):(x=b+"\n",y=c.line+1),0===c.ch&&(y-=1),s.operation((function(){s.replaceRange(x,{line:y,ch:0},{line:y+(x?0:1),ch:0}),s.replaceRange(g,{line:v,ch:0},{line:v+(g?0:1),ch:0})})),s.setSelection({line:v+(g?1:0),ch:0},{line:y+(g?1:-1),ch:0}),s.focus()}else{var D=u.line;if(n(s.getLineHandle(u.line))&&("fenced"===r(s,u.line+1)?(o=u.line,D=u.line+1):(a=u.line,D=u.line-1)),void 0===o)for(o=D;o>=0&&!n(h=s.getLineHandle(o));o--);if(void 0===a)for(l=s.lineCount(),a=D;a=0;o--)if(!(h=s.getLineHandle(o)).text.match(/^\s*$/)&&"indented"!==r(s,o,h)){o+=1;break}for(l=s.lineCount(),a=u.line;a ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:r,ch:0},{line:r,ch:99999999999999})}(e.codemirror)}function O(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.link,n);if(!i)return!1;n=z(i)}X(e,"link",t.insertTexts.link,n)}function I(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.image,n);if(!i)return!1;n=z(i)}X(e,"image",t.insertTexts.image,n)}function z(e){return encodeURI(e).replace(/([\\()])/g,"\\$1")}function H(e){e.openBrowseFileWindow()}function R(e,t){var n=e.codemirror,i=m(n),r=e.options,o=t.substr(t.lastIndexOf("/")+1),a=o.substring(o.lastIndexOf(".")+1).replace(/\?.*$/,"").toLowerCase();if(["png","jpg","jpeg","gif","svg","apng","avif","webp"].includes(a))$(n,i.image,r.insertTexts.uploadedImage,t);else{var l=r.insertTexts.link;l[0]="["+o,$(n,i.link,l,t)}e.updateStatusBar("upload-image",e.options.imageTexts.sbOnUploaded.replace("#image_name#",o)),setTimeout((function(){e.updateStatusBar("upload-image",e.options.imageTexts.sbInit)}),1e3)}function P(e){var t=e.codemirror,n=m(t),i=e.options;$(t,n.table,i.insertTexts.table)}function _(e){var t=e.codemirror,n=m(t),i=e.options;$(t,n.image,i.insertTexts.horizontalRule)}function W(e){var t=e.codemirror;t.undo(),t.focus()}function j(e){var t=e.codemirror;t.redo(),t.focus()}function q(e){var t=e.codemirror,n=t.getWrapperElement(),i=n.nextSibling,r=e.toolbarElements&&e.toolbarElements["side-by-side"],o=!1,a=n.parentNode;i.classList.contains("editor-preview-active-side")?(!1===e.options.sideBySideFullscreen&&a.classList.remove("sided--no-fullscreen"),i.classList.remove("editor-preview-active-side"),r&&r.classList.remove("active"),n.classList.remove("CodeMirror-sided")):(setTimeout((function(){t.getOption("fullScreen")||(!1===e.options.sideBySideFullscreen?a.classList.add("sided--no-fullscreen"):v(e)),i.classList.add("editor-preview-active-side")}),1),r&&r.classList.add("active"),n.classList.add("CodeMirror-sided"),o=!0);var l=n.lastChild;if(l.classList.contains("editor-preview-active")){l.classList.remove("editor-preview-active");var s=e.toolbarElements.preview,u=e.toolbar_div;s.classList.remove("active"),u.classList.remove("disabled-for-preview")}if(t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=function(){var t=e.options.previewRender(e.value(),i);null!=t&&(i.innerHTML=t)}),o){var c=e.options.previewRender(e.value(),i);null!=c&&(i.innerHTML=c),t.on("update",t.sideBySideRenderingFunction)}else t.off("update",t.sideBySideRenderingFunction);t.refresh()}function U(e){var t=e.codemirror,n=t.getWrapperElement(),i=e.toolbar_div,r=!!e.options.toolbar&&e.toolbarElements.preview,o=n.lastChild;if(t.getWrapperElement().nextSibling.classList.contains("editor-preview-active-side")&&q(e),!o||!o.classList.contains("editor-preview-full")){if((o=document.createElement("div")).className="editor-preview-full",e.options.previewClass)if(Array.isArray(e.options.previewClass))for(var a=0;a\s+/,"unordered-list":i,"ordered-list":i},u=function(e,t,o){var a=i.exec(t),l=function(e,t){return{quote:">","unordered-list":n,"ordered-list":"%%i."}[e].replace("%%i",t)}(e,c);return null!==a?(function(e,t){var i=new RegExp({quote:">","unordered-list":"\\"+n,"ordered-list":"\\d+."}[e]);return t&&i.test(t)}(e,a[2])&&(l=""),t=a[1]+l+a[3]+t.replace(r,"").replace(s[e],"$1")):0==o&&(t=l+" "+t),t},c=1,d=a.line;d<=l.line;d++)!function(n){var i=e.getLine(n);o[t]?i=i.replace(s[t],"$1"):("unordered-list"==t&&(i=u("ordered-list",i,!0)),i=u(t,i,!1),c+=1),e.replaceRange(i,{line:n,ch:0},{line:n,ch:99999999999999})}(d);e.focus()}}function X(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){var r=e.codemirror,o=m(r)[t];if(o){var a=r.getCursor("start"),l=r.getCursor("end"),s=r.getLine(a.line),u=s.slice(0,a.ch),c=s.slice(a.ch);"link"==t?u=u.replace(/(.*)[^!]\[/,"$1"):"image"==t&&(u=u.replace(/(.*)!\[$/,"$1")),c=c.replace(/]\(.*?\)/,""),r.replaceRange(u+c,{line:a.line,ch:0},{line:a.line,ch:99999999999999}),a.ch-=n[0].length,a!==l&&(l.ch-=n[0].length),r.setSelection(a,l),r.focus()}else $(r,o,n,i)}}function K(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){i=void 0===i?n:i;var r,o=e.codemirror,a=m(o),l=n,s=i,u=o.getCursor("start"),c=o.getCursor("end");a[t]?(l=(r=o.getLine(u.line)).slice(0,u.ch),s=r.slice(u.ch),"bold"==t?(l=l.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),s=s.replace(/(\*\*|__)/,"")):"italic"==t?(l=l.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),s=s.replace(/(\*|_)/,"")):"strikethrough"==t&&(l=l.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),s=s.replace(/(\*\*|~~)/,"")),o.replaceRange(l+s,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==c&&(c.ch-=2)):"italic"==t&&(u.ch-=1,u!==c&&(c.ch-=1))):(r=o.getSelection(),"bold"==t?r=(r=r.split("**").join("")).split("__").join(""):"italic"==t?r=(r=r.split("*").join("")).split("_").join(""):"strikethrough"==t&&(r=r.split("~~").join("")),o.replaceSelection(l+r+s),u.ch+=n.length,c.ch=u.ch+r.length),o.setSelection(u,c),o.focus()}}function Z(e,t){if(Math.abs(e)<1024)return""+e+t[0];var n=0;do{e/=1024,++n}while(Math.abs(e)>=1024&&n=19968?n+=t[i].length:n+=1;return n}var ee={bold:"fa fa-bold",italic:"fa fa-italic",strikethrough:"fa fa-strikethrough",heading:"fa fa-header fa-heading","heading-smaller":"fa fa-header fa-heading header-smaller","heading-bigger":"fa fa-header fa-heading header-bigger","heading-1":"fa fa-header fa-heading header-1","heading-2":"fa fa-header fa-heading header-2","heading-3":"fa fa-header fa-heading header-3",code:"fa fa-code",quote:"fa fa-quote-left","ordered-list":"fa fa-list-ol","unordered-list":"fa fa-list-ul","clean-block":"fa fa-eraser",link:"fa fa-link",image:"fa fa-image","upload-image":"fa fa-image",table:"fa fa-table","horizontal-rule":"fa fa-minus",preview:"fa fa-eye","side-by-side":"fa fa-columns",fullscreen:"fa fa-arrows-alt",guide:"fa fa-question-circle",undo:"fa fa-undo",redo:"fa fa-repeat fa-redo"},te={bold:{name:"bold",action:x,className:ee.bold,title:"Bold",default:!0},italic:{name:"italic",action:y,className:ee.italic,title:"Italic",default:!0},strikethrough:{name:"strikethrough",action:b,className:ee.strikethrough,title:"Strikethrough"},heading:{name:"heading",action:w,className:ee.heading,title:"Heading",default:!0},"heading-smaller":{name:"heading-smaller",action:w,className:ee["heading-smaller"],title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:k,className:ee["heading-bigger"],title:"Bigger Heading"},"heading-1":{name:"heading-1",action:S,className:ee["heading-1"],title:"Big Heading"},"heading-2":{name:"heading-2",action:F,className:ee["heading-2"],title:"Medium Heading"},"heading-3":{name:"heading-3",action:A,className:ee["heading-3"],title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:D,className:ee.code,title:"Code"},quote:{name:"quote",action:C,className:ee.quote,title:"Quote",default:!0},"unordered-list":{name:"unordered-list",action:M,className:ee["unordered-list"],title:"Generic List",default:!0},"ordered-list":{name:"ordered-list",action:B,className:ee["ordered-list"],title:"Numbered List",default:!0},"clean-block":{name:"clean-block",action:N,className:ee["clean-block"],title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:O,className:ee.link,title:"Create Link",default:!0},image:{name:"image",action:I,className:ee.image,title:"Insert Image",default:!0},"upload-image":{name:"upload-image",action:H,className:ee["upload-image"],title:"Import an image"},table:{name:"table",action:P,className:ee.table,title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:_,className:ee["horizontal-rule"],title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:U,className:ee.preview,noDisable:!0,title:"Toggle Preview",default:!0},"side-by-side":{name:"side-by-side",action:q,className:ee["side-by-side"],noDisable:!0,noMobile:!0,title:"Toggle Side by Side",default:!0},fullscreen:{name:"fullscreen",action:v,className:ee.fullscreen,noDisable:!0,noMobile:!0,title:"Toggle Fullscreen",default:!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://www.markdownguide.org/basic-syntax/",className:ee.guide,noDisable:!0,title:"Markdown Guide",default:!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:W,className:ee.undo,noDisable:!0,title:"Undo"},redo:{name:"redo",action:j,className:ee.redo,noDisable:!0,title:"Redo"}},ne={link:["[","](#url#)"],image:[""],uploadedImage:["",""],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},ie={link:"URL for the link:",image:"URL of the image:"},re={locale:"en-US",format:{hour:"2-digit",minute:"2-digit"}},oe={bold:"**",code:"```",italic:"*"},ae={sbInit:"Attach files by drag and dropping or pasting from clipboard.",sbOnDragEnter:"Drop image to upload it.",sbOnDrop:"Uploading image #images_names#...",sbProgress:"Uploading #file_name#: #progress#%",sbOnUploaded:"Uploaded #image_name#",sizeUnits:" B, KB, MB"},le={noFileGiven:"You must select a file.",typeNotAllowed:"This image type is not allowed.",fileTooLarge:"Image #image_name# is too big (#image_size#).\nMaximum file size is #image_max_size#.",importError:"Something went wrong when uploading the image #image_name#."};function se(e){(e=e||{}).parent=this;var t=!0;if(!1===e.autoDownloadFontAwesome&&(t=!1),!0!==e.autoDownloadFontAwesome)for(var n=document.styleSheets,i=0;i-1&&(t=!1);if(t){var r=document.createElement("link");r.rel="stylesheet",r.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(r)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("EasyMDE: Error. No element was found.");if(void 0===e.toolbar)for(var o in e.toolbar=[],te)Object.prototype.hasOwnProperty.call(te,o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(!0===te[o].default||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o));if(Object.prototype.hasOwnProperty.call(e,"previewClass")||(e.previewClass="editor-preview"),Object.prototype.hasOwnProperty.call(e,"status")||(e.status=["autosave","lines","words","cursor"],e.uploadImage&&e.status.unshift("upload-image")),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=Q({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=Q({},ne,e.insertTexts||{}),e.promptTexts=Q({},ie,e.promptTexts||{}),e.blockStyles=Q({},oe,e.blockStyles||{}),null!=e.autosave&&(e.autosave.timeFormat=Q({},re,e.autosave.timeFormat||{})),e.iconClassMap=Q({},ee,e.iconClassMap||{}),e.shortcuts=Q({},u,e.shortcuts||{}),e.maxHeight=e.maxHeight||void 0,e.direction=e.direction||"ltr",void 0!==e.maxHeight?e.minHeight=e.maxHeight:e.minHeight=e.minHeight||"300px",e.errorCallback=e.errorCallback||function(e){alert(e)},e.uploadImage=e.uploadImage||!1,e.imageMaxSize=e.imageMaxSize||2097152,e.imageAccept=e.imageAccept||"image/png, image/jpeg, image/gif, image/avif",e.imageTexts=Q({},ae,e.imageTexts||{}),e.errorMessages=Q({},le,e.errorMessages||{}),e.imagePathAbsolute=e.imagePathAbsolute||!1,e.imageCSRFName=e.imageCSRFName||"csrfmiddlewaretoken",e.imageCSRFHeader=e.imageCSRFHeader||!1,e.imageInputName=e.imageInputName||"image",null!=e.autosave&&null!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),e.overlayMode&&void 0===e.overlayMode.combine&&(e.overlayMode.combine=!0),this.options=e,this.render(),!e.initialValue||this.options.autosave&&!0===this.options.autosave.foundSavedValue||this.value(e.initialValue),e.uploadImage){var a=this;this.codemirror.on("dragenter",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragend",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragleave",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragover",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("drop",(function(t,n){n.stopPropagation(),n.preventDefault(),e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.dataTransfer.files):a.uploadImages(n.dataTransfer.files)})),this.codemirror.on("paste",(function(t,n){e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.clipboardData.files):a.uploadImages(n.clipboardData.files)}))}}function ue(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}se.prototype.uploadImages=function(e,t,n){if(0!==e.length){for(var i=[],r=0;r$/,' target="_blank">');e=e.replace(n,i)}}return e}(i))}},se.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t,n,o=this.options,a=this,l={};for(var u in o.shortcuts)null!==o.shortcuts[u]&&null!==s[u]&&function(e){l[d(o.shortcuts[e])]=function(){var t=s[e];"function"==typeof t?t(a):"string"==typeof t&&window.open(t,"_blank")}}(u);if(l.Enter="newlineAndIndentContinueMarkdownList",l.Tab="tabAndIndentMarkdownList",l["Shift-Tab"]="shiftTabAndUnindentMarkdownList",l.Esc=function(e){e.getOption("fullScreen")&&v(a)},this.documentOnKeyDown=function(e){27==(e=e||window.event).keyCode&&a.codemirror.getOption("fullScreen")&&v(a)},document.addEventListener("keydown",this.documentOnKeyDown,!1),o.overlayMode?(i.defineMode("overlay-mode",(function(e){return i.overlayMode(i.getMode(e,!1!==o.spellChecker?"spell-checker":"gfm"),o.overlayMode.mode,o.overlayMode.combine)})),t="overlay-mode",(n=o.parsingConfig).gitHubSpice=!1):((t=o.parsingConfig).name="gfm",t.gitHubSpice=!1),!1!==o.spellChecker&&(t="spell-checker",(n=o.parsingConfig).name="gfm",n.gitHubSpice=!1,"function"==typeof o.spellChecker?o.spellChecker({codeMirrorInstance:i}):r({codeMirrorInstance:i})),this.codemirror=i.fromTextArea(e,{mode:t,backdrop:n,theme:null!=o.theme?o.theme:"easymde",tabSize:null!=o.tabSize?o.tabSize:2,indentUnit:null!=o.tabSize?o.tabSize:2,indentWithTabs:!1!==o.indentWithTabs,lineNumbers:!0===o.lineNumbers,autofocus:!0===o.autofocus,extraKeys:l,direction:o.direction,lineWrapping:!1!==o.lineWrapping,allowDropFileTypes:["text/plain"],placeholder:o.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:null!=o.styleSelectedText?o.styleSelectedText:!c(),scrollbarStyle:null!=o.scrollbarStyle?o.scrollbarStyle:"native",configureMouse:function(e,t,n){return{addNew:!1}},inputStyle:null!=o.inputStyle?o.inputStyle:c()?"contenteditable":"textarea",spellcheck:null==o.nativeSpellcheck||o.nativeSpellcheck,autoRefresh:null!=o.autoRefresh&&o.autoRefresh}),this.codemirror.getScrollerElement().style.minHeight=o.minHeight,void 0!==o.maxHeight&&(this.codemirror.getScrollerElement().style.height=o.maxHeight),!0===o.forceSync){var h=this.codemirror;h.on("change",(function(){h.save()}))}this.gui={};var f=document.createElement("div");f.classList.add("EasyMDEContainer"),f.setAttribute("role","application");var p=this.codemirror.getWrapperElement();p.parentNode.insertBefore(f,p),f.appendChild(p),!1!==o.toolbar&&(this.gui.toolbar=this.createToolbar()),!1!==o.status&&(this.gui.statusbar=this.createStatusbar()),null!=o.autosave&&!0===o.autosave.enabled&&(this.autosave(),this.codemirror.on("change",(function(){clearTimeout(a._autosave_timeout),a._autosave_timeout=setTimeout((function(){a.autosave()}),a.options.autosave.submit_delay||a.options.autosave.delay||1e3)})));var m=this;this.codemirror.on("update",(function(){o.previewImagesInEditor&&f.querySelectorAll(".cm-image-marker").forEach((function(e){var t=e.parentElement;if(t.innerText.match(/^!\[.*?\]\(.*\)/g)&&!t.hasAttribute("data-img-src")){var n=t.innerText.match(/!\[.*?\]\((.*?)\)/);if(window.EMDEimagesCache||(window.EMDEimagesCache={}),n&&n.length>=2){var i=n[1];if(o.imagesPreviewHandler){var r=o.imagesPreviewHandler(n[1]);"string"==typeof r&&(i=r)}if(window.EMDEimagesCache[i])x(t,window.EMDEimagesCache[i]);else{window.EMDEimagesCache[i]={};var a=document.createElement("img");a.onload=function(){window.EMDEimagesCache[i]={naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight,url:i},x(t,window.EMDEimagesCache[i])},a.src=i}}}}))})),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(!0===o.autofocus||e.autofocus)&&this.codemirror.focus();var g=this.codemirror;setTimeout(function(){g.refresh()}.bind(g),0)}function x(e,t){var n,i,r=new URL(t.url,document.baseURI).href;e.setAttribute("data-img-src",r),e.setAttribute("style","--bg-image:url("+r+");--width:"+t.naturalWidth+"px;--height:"+(n=t.naturalWidth,i=t.naturalHeight,nthis.options.imageMaxSize)r(o(this.options.errorMessages.fileTooLarge));else{var a=new FormData;a.append("image",e),i.options.imageCSRFToken&&!i.options.imageCSRFHeader&&a.append(i.options.imageCSRFName,i.options.imageCSRFToken);var l=new XMLHttpRequest;l.upload.onprogress=function(t){if(t.lengthComputable){var n=""+Math.round(100*t.loaded/t.total);i.updateStatusBar("upload-image",i.options.imageTexts.sbProgress.replace("#file_name#",e.name).replace("#progress#",n))}},l.open("POST",this.options.imageUploadEndpoint),i.options.imageCSRFToken&&i.options.imageCSRFHeader&&l.setRequestHeader(i.options.imageCSRFName,i.options.imageCSRFToken),l.onload=function(){try{var e=JSON.parse(this.responseText)}catch(e){return console.error("EasyMDE: The server did not return a valid json."),void r(o(i.options.errorMessages.importError))}200===this.status&&e&&!e.error&&e.data&&e.data.filePath?t((i.options.imagePathAbsolute?"":window.location.origin+"/")+e.data.filePath):e.error&&e.error in i.options.errorMessages?r(o(i.options.errorMessages[e.error])):e.error?r(o(e.error)):(console.error("EasyMDE: Received an unexpected response after uploading the image."+this.status+" ("+this.statusText+")"),r(o(i.options.errorMessages.importError)))},l.onerror=function(e){console.error("EasyMDE: An unexpected error occurred when trying to upload the image."+e.target.status+" ("+e.target.statusText+")"),r(i.options.errorMessages.importError)},l.send(a)}},se.prototype.uploadImageUsingCustomFunction=function(e,t){var n=this;e.apply(this,[t,function(e){R(n,e)},function(e){var i=function(e){var i=n.options.imageTexts.sizeUnits.split(",");return e.replace("#image_name#",t.name).replace("#image_size#",Z(t.size,i)).replace("#image_max_size#",Z(n.options.imageMaxSize,i))}(e);n.updateStatusBar("upload-image",i),setTimeout((function(){n.updateStatusBar("upload-image",n.options.imageTexts.sbInit)}),1e4),n.options.errorCallback(i)}])},se.prototype.setPreviewMaxHeight=function(){var e=this.codemirror.getWrapperElement(),t=e.nextSibling,n=parseInt(window.getComputedStyle(e).paddingTop),i=parseInt(window.getComputedStyle(e).borderTopWidth),r=(parseInt(this.options.maxHeight)+2*n+2*i).toString()+"px";t.style.height=r},se.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;if(!n||!n.classList.contains("editor-preview-side")){if((n=document.createElement("div")).className="editor-preview-side",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var i=0;i and other contributors
+ License: BSD-3-Clause
+ */
+var hljs=function(){"use strict";function e(t){
+return t instanceof Map?t.clear=t.delete=t.set=()=>{
+throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
+throw Error("set is read-only")
+}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
+const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
+})),t}class t{constructor(e){
+void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
+ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
+return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")
+}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
+;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
+;class r{constructor(e,t){
+this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
+this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
+if(e.startsWith("language:"))return e.replace("language:","language-")
+;if(e.includes(".")){const n=e.split(".")
+;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
+}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
+closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){
+this.buffer+=``}}const o=(e={})=>{const t={children:[]}
+;return Object.assign(t,e),t};class a{constructor(){
+this.rootNode=o(),this.stack=[this.rootNode]}get top(){
+return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
+this.top.children.push(e)}openNode(e){const t=o({scope:e})
+;this.add(t),this.stack.push(t)}closeNode(){
+if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
+for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
+walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
+return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
+t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
+"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
+a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
+addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
+this.closeNode()}__addSublanguage(e,t){const n=e.root
+;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
+return new r(this,this.options).value()}finalize(){
+return this.closeAllNodes(),!0}}function l(e){
+return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
+function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
+function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
+const t=e[e.length-1]
+;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
+})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
+function p(e){return RegExp(e.toString()+"|").exec("").length-1}
+const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
+;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
+;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
+s+=i.substring(0,e.index),
+i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
+"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
+const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",_="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",O={
+begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
+illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
+contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
+contains:[]},n);s.contains.push({scope:"doctag",
+begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
+end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
+;const r=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
+;return s.contains.push({begin:h(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
+},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({
+__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
+scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:N,
+C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
+begin:_,relevance:0},C_NUMBER_RE:_,END_SAME_AS_BEGIN:e=>Object.assign(e,{
+"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
+t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
+MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
+NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y,
+PHRASAL_WORDS_MODE:{
+begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
+},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
+end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
+RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
+SHEBANG:(e={})=>{const t=/^#![ ]*\//
+;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
+end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
+TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
+UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){
+"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
+void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
+t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
+e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
+void 0===e.relevance&&(e.relevance=0))}function L(e,t){
+Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
+if(e.match){
+if(e.begin||e.end)throw Error("begin & end are not supported with match")
+;e.begin=e.match,delete e.match}}function P(e,t){
+void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
+;if(e.starts)throw Error("beforeMatch cannot be used with starts")
+;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
+})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
+relevance:0,contains:[Object.assign(n,{endsParent:!0})]
+},e.relevance=0,delete n.beforeMatch
+},H=["of","and","for","in","not","or","if","then","parent","list","value"]
+;function C(e,t,n="keyword"){const i=Object.create(null)
+;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
+Object.assign(i,C(e[n],t,n))})),i;function s(e,n){
+t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
+;i[n[0]]=[e,$(n[0],n[1])]}))}}function $(e,t){
+return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const U={},z=e=>{
+console.error(e)},W=(e,...t)=>{console.log("WARN: "+e,...t)},X=(e,t)=>{
+U[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),U[`${e}/${t}`]=!0)
+},G=Error();function K(e,t,{key:n}){let i=0;const s=e[n],r={},o={}
+;for(let e=1;e<=t.length;e++)o[e+i]=s[e],r[e+i]=!0,i+=p(t[e-1])
+;e[n]=o,e[n]._emit=r,e[n]._multi=!0}function F(e){(e=>{
+e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
+delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
+_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
+}),(e=>{if(Array.isArray(e.begin)){
+if(e.skip||e.excludeBegin||e.returnBegin)throw z("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
+G
+;if("object"!=typeof e.beginScope||null===e.beginScope)throw z("beginScope must be object"),
+G;K(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
+if(Array.isArray(e.end)){
+if(e.skip||e.excludeEnd||e.returnEnd)throw z("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
+G
+;if("object"!=typeof e.endScope||null===e.endScope)throw z("endScope must be object"),
+G;K(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function Z(e){
+function t(t,n){
+return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
+}class n{constructor(){
+this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
+addRule(e,t){
+t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
+this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
+;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
+}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
+;const t=this.matcherRe.exec(e);if(!t)return null
+;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
+;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
+this.rules=[],this.multiRegexes=[],
+this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
+if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
+;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
+t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
+return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
+this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
+const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
+;let n=t.exec(e)
+;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
+const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
+return n&&(this.regexIndex+=n.position+1,
+this.regexIndex===this.count&&this.considerAll()),n}}
+if(e.compilerExtensions||(e.compilerExtensions=[]),
+e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
+;return e.classNameAliases=i(e.classNameAliases||{}),function n(r,o){const a=r
+;if(r.isCompiled)return a
+;[I,B,F,D].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))),
+r.__beforeBegin=null,[T,L,P].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null
+;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
+c=r.keywords.$pattern,
+delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=C(r.keywords,e.case_insensitive)),
+a.keywordPatternRe=t(c,!0),
+o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
+r.end&&(a.endRe=t(a.end)),
+a.terminatorEnd=l(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)),
+r.illegal&&(a.illegalRe=t(r.illegal)),
+r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
+variants:null},t)))),e.cachedVariants?e.cachedVariants:V(e)?i(e,{
+starts:e.starts?i(e.starts):null
+}):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a)
+})),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new s
+;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
+}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
+}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function V(e){
+return!!e&&(e.endsWithParent||V(e.starts))}class q extends Error{
+constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
+const J=n,Y=i,Q=Symbol("nomatch"),ee=n=>{
+const i=Object.create(null),s=Object.create(null),r=[];let o=!0
+;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
+disableAutodetect:!0,name:"Plain text",contains:[]};let p={
+ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
+languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
+cssSelector:"pre code",languages:null,__emitter:c};function b(e){
+return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
+;"object"==typeof t?(i=e,
+n=t.ignoreIllegals,s=t.language):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."),
+X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
+s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};N("before:highlight",r)
+;const o=r.result?r.result:E(r.language,r.code,n)
+;return o.code=r.code,N("after:highlight",o),o}function E(e,n,s,r){
+const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
+;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
+;for(;t;){n+=R.substring(e,t.index)
+;const s=w.case_insensitive?t[0].toLowerCase():t[0],r=(i=s,N.keywords[i]);if(r){
+const[e,i]=r
+;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{
+const n=w.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
+;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
+;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
+if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
+if(!i[N.subLanguage])return void M.addText(R)
+;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
+}else e=x(R,N.subLanguage.length?N.subLanguage:null)
+;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language)
+})():l(),R=""}function u(e,t){
+""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
+;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
+const i=w.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
+function h(e,t){
+return e.scope&&"string"==typeof e.scope&&M.openNode(w.classNameAliases[e.scope]||e.scope),
+e.beginScope&&(e.beginScope._wrap?(u(R,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
+R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
+value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
+;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
+;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
+for(;e.endsParent&&e.parent;)e=e.parent;return e}}
+if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
+return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
+const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return Q;const r=N
+;N.endScope&&N.endScope._wrap?(g(),
+u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
+d(N.endScope,e)):r.skip?R+=t:(r.returnEnd||r.excludeEnd||(R+=t),
+g(),r.excludeEnd&&(R=t));do{
+N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent
+}while(N!==s.parent);return s.starts&&h(s.starts,e),r.returnEnd?0:t.length}
+let y={};function _(i,r){const a=r&&r[0];if(R+=i,null==a)return g(),0
+;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===a){
+if(R+=n.slice(r.index,r.index+1),!o){const t=Error(`0 width match regex (${e})`)
+;throw t.languageName=e,t.badRule=y.rule,t}return 1}
+if(y=r,"begin"===r.type)return(e=>{
+const n=e[0],i=e.rule,s=new t(i),r=[i.__beforeBegin,i["on:begin"]]
+;for(const t of r)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
+;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
+g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(r)
+;if("illegal"===r.type&&!s){
+const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"")+'"')
+;throw e.mode=N,e}if("end"===r.type){const e=m(r);if(e!==Q)return e}
+if("illegal"===r.type&&""===a)return R+="\n",1
+;if(I>1e5&&I>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
+;return R+=a,a.length}const w=O(e)
+;if(!w)throw z(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
+;const v=Z(w);let k="",N=r||v;const S={},M=new p.__emitter(p);(()=>{const e=[]
+;for(let t=N;t!==w;t=t.parent)t.scope&&e.unshift(t.scope)
+;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{
+if(w.__emitTokens)w.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
+I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A
+;const e=N.matcher.exec(n);if(!e)break;const t=_(n.substring(A,e.index),e)
+;A=e.index+t}_(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e,
+value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){
+if(t.message&&t.message.includes("Illegal"))return{language:e,value:J(n),
+illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A,
+context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(o)return{
+language:e,value:J(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
+;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
+const t={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
+;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1)))
+;s.unshift(n);const r=s.sort(((e,t)=>{
+if(e.relevance!==t.relevance)return t.relevance-e.relevance
+;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
+;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=r,c=o
+;return c.secondBest=a,c}function y(e){let t=null;const n=(e=>{
+let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
+;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
+;return t||(W(a.replace("{}",n[1])),
+W("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
+return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
+;if(N("before:highlightElement",{el:e,language:n
+}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
+;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
+console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
+console.warn("The element with unescaped HTML:"),
+console.warn(e)),p.throwUnescapedHTML))throw new q("One of your code blocks includes unescaped HTML.",e.innerHTML)
+;t=e;const i=t.textContent,r=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
+;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
+;e.classList.add("hljs"),e.classList.add("language-"+i)
+})(e,n,r.language),e.result={language:r.language,re:r.relevance,
+relevance:r.relevance},r.secondBest&&(e.secondBest={
+language:r.secondBest.language,relevance:r.secondBest.relevance
+}),N("after:highlightElement",{el:e,result:r,text:i})}let _=!1;function w(){
+if("loading"===document.readyState)return _||window.addEventListener("DOMContentLoaded",(()=>{
+w()}),!1),void(_=!0);document.querySelectorAll(p.cssSelector).forEach(y)}
+function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
+function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
+s[e.toLowerCase()]=t}))}function k(e){const t=O(e)
+;return t&&!t.disableAutodetect}function N(e,t){const n=e;r.forEach((e=>{
+e[n]&&e[n](t)}))}Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:w,
+highlightElement:y,
+highlightBlock:e=>(X("10.7.0","highlightBlock will be removed entirely in v12.0"),
+X("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)},
+initHighlighting:()=>{
+w(),X("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
+initHighlightingOnLoad:()=>{
+w(),X("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
+},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
+if(z("Language definition for '{}' could not be registered.".replace("{}",e)),
+!o)throw t;z(t),s=l}
+s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{
+languageName:e})},unregisterLanguage:e=>{delete i[e]
+;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
+listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v,
+autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{
+e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
+e["before:highlightBlock"](Object.assign({block:t.el},t))
+}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
+e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),r.push(e)},
+removePlugin:e=>{const t=r.indexOf(e);-1!==t&&r.splice(t,1)}}),n.debugMode=()=>{
+o=!1},n.safeMode=()=>{o=!0},n.versionString="11.11.1",n.regex={concat:h,
+lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
+;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n
+},te=ee({});return te.newInstance=()=>ee({}),te}()
+;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `bash` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/,
+end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{
+className:"variable",variants:[{
+begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={
+className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
+},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={
+begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
+end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
+contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(o);const r={begin:/\$?\(\(/,
+end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
+},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
+}),m={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
+contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
+name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
+keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],
+literal:["true","false"],
+built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
+},contains:[l,e.SHEBANG(),m,r,i,c,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
+className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})()
+;hljs.registerLanguage("bash",e)})();/*! `css` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict"
+;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],i=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),t=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),o=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse()
+;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
+BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
+begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
+className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
+scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
+contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
+scope:"number",
+begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
+relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}
+}))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",
+case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},
+classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{
+begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{
+className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{
+className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0
+},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{
+begin:":("+t.join("|")+")"},{begin:":(:)?("+o.join("|")+")"}]},l.CSS_VARIABLE,{
+className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,
+contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{
+begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"
+},contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0,
+excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:a.lookahead(/@/),end:"[{;]",
+relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/
+},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{
+$pattern:/[a-z-]+/,keyword:"and or not only",attribute:i.join(" ")},contains:[{
+begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{
+className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})()
+;hljs.registerLanguage("css",e)})();/*! `diff` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"Diff",
+aliases:["patch"],contains:[{className:"meta",relevance:10,
+match:a.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
+},{className:"comment",variants:[{
+begin:a.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
+end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
+className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
+end:/$/}]}}})();hljs.registerLanguage("diff",e)})();/*! `graphql` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=e.regex;return{name:"GraphQL",
+aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{
+keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
+literal:["true","false","null"]},
+contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
+scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
+begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
+end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
+scope:"symbol",begin:a.concat(/[_A-Za-z][_0-9A-Za-z]*/,a.lookahead(/\s*:/)),
+relevance:0}],illegal:[/[;<']/,/BEGIN/]}}})();hljs.registerLanguage("graphql",e)
+})();/*! `javascript` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict"
+;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s)
+;return o=>{const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/,
+end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
+const a=e[0].length+e.index,t=e.input[a]
+;if("<"===t||","===t)return void n.ignoreMatch();let s
+;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
+;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
+;const r=e.input.substring(a)
+;((s=r.match(/^\s*=/))||(s=r.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
+}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":c
+},u="[0-9](_?[0-9])*",m=`\\.(${u})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={
+className:"number",variants:[{
+begin:`(\\b(${E})((${m})|\\.)?|(${m}))[eE][+-]?(${u})\\b`},{
+begin:`\\b(${E})\\b((${m})\\b|\\.)?|(${m})\\b`},{
+begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
+end:"\\}",keywords:g,contains:[]},h={begin:".?html`",end:"",starts:{end:"`",
+returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},_={
+begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
+contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},N={begin:".?gql`",end:"",
+starts:{end:"`",returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],
+subLanguage:"graphql"}},f={className:"string",begin:"`",end:"`",
+contains:[o.BACKSLASH_ESCAPE,y]},p={className:"comment",
+variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
+excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",
+endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
+},v=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,_,N,f,{match:/\$\d+/},A]
+;y.contains=v.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(v)
+});const S=[].concat(p,y.contains),w=S.concat([{begin:/(\s*)\(/,end:/\)/,
+keywords:g,contains:["self"].concat(S)}]),R={className:"params",begin:/(\s*)\(/,
+end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w},O={variants:[{
+match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,l.concat(d,"(",l.concat(/\./,d),")*")],
+scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
+match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},k={relevance:0,
+match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
+className:"title.class",keywords:{_:[...t,...s]}},I={variants:[{
+match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
+className:{1:"keyword",3:"title.function"},label:"func.def",contains:[R],
+illegal:/%/},x={
+match:l.concat(/\b/,(T=[...r,"super","import"].map((e=>e+"\\s*\\(")),
+l.concat("(?!",T.join("|"),")")),d,l.lookahead(/\s*\(/)),
+className:"title.function",relevance:0};var T;const C={
+begin:l.concat(/\./,l.lookahead(l.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,
+excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={
+match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},
+contains:[{begin:/\(\)/},R]
+},B="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",$={
+match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)],
+keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]}
+;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
+PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/,
+contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
+label:"use_strict",className:"meta",relevance:10,
+begin:/^\s*['"]use (strict|asm)['"]/
+},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,_,N,f,p,{match:/\$\d+/},A,k,{
+scope:"attr",match:d+l.lookahead(":"),relevance:0},$,{
+begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+keywords:"return throw case",relevance:0,contains:[p,o.REGEXP_MODE,{
+className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{
+className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
+className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0
+},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:">"},{
+match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,
+"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{
+begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},I,{
+beginKeywords:"while if switch catch for"},{
+begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:d,
+className:"title.function"})]},{match:/\.\.\./,relevance:0},C,{match:"\\$"+d,
+relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
+contains:[R]},x,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},O,M,{match:/\$[(.]/}]}}})()
+;hljs.registerLanguage("javascript",e)})();/*! `json` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],s={
+scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",aliases:["jsonc"],
+keywords:{literal:a},contains:[{className:"attr",
+begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,
+className:"punctuation",relevance:0
+},e.QUOTE_STRING_MODE,s,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
+illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `markdown` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/,
+end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/,
+relevance:0},{
+begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
+relevance:2},{
+begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),
+relevance:2},{begin:/\[.+?\]\([./?].*?\)/,relevance:1},{
+begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
+},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,
+returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
+excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
+end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[],
+variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
+},s={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
+begin:/_(?![_\s])/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[]
+}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c)
+;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g)
+})),g=g.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
+className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:g},{
+begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",
+contains:g}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",
+end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:g,
+end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{
+begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{
+begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",
+contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{
+begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{
+className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{
+className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal",
+match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}})()
+;hljs.registerLanguage("markdown",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text",
+aliases:["text","txt"],disableAutodetect:!0})})()
+;hljs.registerLanguage("plaintext",t)})();/*! `ruby` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const n=e.regex,a="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",s=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(s,/(::\w+)*/),t={
+"variable.constant":["__FILE__","__LINE__","__ENCODING__"],
+"variable.language":["self","super"],
+keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],
+built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],
+literal:["true","false","nil"]},c={className:"doctag",begin:"@[A-Za-z]+"},r={
+begin:"#<",end:">"},b=[e.COMMENT("#","$",{contains:[c]
+}),e.COMMENT("^=begin","^=end",{contains:[c],relevance:10
+}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],l={className:"subst",begin:/#\{/,
+end:/\}/,keywords:t},d={className:"string",contains:[e.BACKSLASH_ESCAPE,l],
+variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{
+begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{
+begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?,end:/>/},{begin:/%[qQwWx]?\//,
+end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{
+begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
+begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
+begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
+begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
+begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),
+contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,
+contains:[e.BACKSLASH_ESCAPE,l]})]}]},o="[0-9](_?[0-9])*",g={className:"number",
+relevance:0,variants:[{
+begin:`\\b([1-9](_?[0-9])*|0)(\\.(${o}))?([eE][+-]?(${o})|r)?i?\\b`},{
+begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"
+},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
+begin:"\\b0(_?[0-7])+r?i?\\b"}]},_={variants:[{match:/\(\)/},{
+className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
+keywords:t}]},u=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
+match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",
+4:"title.class.inherited"},keywords:t},{match:[/(include|extend)\s+/,i],scope:{
+2:"title.class"},keywords:t},{relevance:0,match:[i,/\.new[. (]/],scope:{
+1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},{relevance:0,match:s,scope:"title.class"},{
+match:[/def/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[_]},{
+begin:e.IDENT_RE+"::"},{className:"symbol",
+begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
+begin:":(?!\\s)",contains:[d,{begin:a}],relevance:0},g,{className:"variable",
+begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{
+className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,
+relevance:0,keywords:t},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",
+keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,l],
+illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{
+begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",
+end:"\\][a-z]*"}]}].concat(r,b),relevance:0}].concat(r,b)
+;l.contains=u,_.contains=u;const m=[{begin:/^\s*=>/,starts:{end:"$",contains:u}
+},{className:"meta.prompt",
+begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",
+starts:{end:"$",keywords:t,contains:u}}];return b.unshift(r),{name:"Ruby",
+aliases:["rb","gemspec","podspec","thor","irb"],keywords:t,illegal:/\/\*/,
+contains:[e.SHEBANG({binary:"ruby"})].concat(m).concat(b).concat(u)}}})()
+;hljs.registerLanguage("ruby",e)})();/*! `shell` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var s=(()=>{"use strict";return s=>({name:"Shell Session",
+aliases:["console","shellsession"],contains:[{className:"meta.prompt",
+begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
+subLanguage:"bash"}}]})})();hljs.registerLanguage("shell",s)})();/*! `sql` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const r=e.regex,t=e.COMMENT("--","$"),a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],n=a,s=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),i={
+match:r.concat(/\b/,r.either(...n),/\s*\(/),relevance:0,keywords:{built_in:n}}
+;function o(e){
+return r.concat(/\b/,r.either(...e.map((e=>e.replace(/\s+/,"\\s+")))),/\b/)}
+const c={scope:"keyword",
+match:o(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]),
+relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{
+$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const a=t
+;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:a(e)?e+"|0":e))
+})(s,{when:e=>e.length<3}),literal:["true","false","unknown"],
+type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],
+built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]
+},contains:[{scope:"type",
+match:o(["double precision","large object","with timezone","without timezone"])
+},c,i,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{
+begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{
+match:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{scope:"operator",
+match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}})()
+;hljs.registerLanguage("sql",e)})();/*! `typescript` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict"
+;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],c=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],r=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(c,t,s)
+;function o(o){const l=o.regex,d=e,b={begin:/<[A-Za-z0-9\\._:-]+/,
+end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
+const a=e[0].length+e.index,t=e.input[a]
+;if("<"===t||","===t)return void n.ignoreMatch();let s
+;">"===t&&(((e,{after:n})=>{const a=""+e[0].slice(1)
+;return-1!==e.input.indexOf(a,n)})(e,{after:a})||n.ignoreMatch())
+;const c=e.input.substring(a)
+;((s=c.match(/^\s*=/))||(s=c.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
+}},g={$pattern:e,keyword:n,literal:a,built_in:i,"variable.language":r
+},u="[0-9](_?[0-9])*",m=`\\.(${u})`,E="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",A={
+className:"number",variants:[{
+begin:`(\\b(${E})((${m})|\\.)?|(${m}))[eE][+-]?(${u})\\b`},{
+begin:`\\b(${E})\\b((${m})\\b|\\.)?|(${m})\\b`},{
+begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+begin:"\\b0[0-7]+n?\\b"}],relevance:0},y={className:"subst",begin:"\\$\\{",
+end:"\\}",keywords:g,contains:[]},p={begin:".?html`",end:"",starts:{end:"`",
+returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"xml"}},N={
+begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
+contains:[o.BACKSLASH_ESCAPE,y],subLanguage:"css"}},f={begin:".?gql`",end:"",
+starts:{end:"`",returnEnd:!1,contains:[o.BACKSLASH_ESCAPE,y],
+subLanguage:"graphql"}},_={className:"string",begin:"`",end:"`",
+contains:[o.BACKSLASH_ESCAPE,y]},h={className:"comment",
+variants:[o.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
+begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
+excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",
+endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE]
+},S=[o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,p,N,f,_,{match:/\$\d+/},A]
+;y.contains=S.concat({begin:/\{/,end:/\}/,keywords:g,contains:["self"].concat(S)
+});const v=[].concat(h,y.contains),w=v.concat([{begin:/(\s*)\(/,end:/\)/,
+keywords:g,contains:["self"].concat(v)}]),R={className:"params",begin:/(\s*)\(/,
+end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w},k={variants:[{
+match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,l.concat(d,"(",l.concat(/\./,d),")*")],
+scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
+match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},x={relevance:0,
+match:l.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
+className:"title.class",keywords:{_:[...t,...s]}},O={variants:[{
+match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
+className:{1:"keyword",3:"title.function"},label:"func.def",contains:[R],
+illegal:/%/},I={
+match:l.concat(/\b/,(C=[...c,"super","import"].map((e=>e+"\\s*\\(")),
+l.concat("(?!",C.join("|"),")")),d,l.lookahead(/\s*\(/)),
+className:"title.function",relevance:0};var C;const T={
+begin:l.concat(/\./,l.lookahead(l.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,
+excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},M={
+match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},
+contains:[{begin:/\(\)/},R]
+},B="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+o.UNDERSCORE_IDENT_RE+")\\s*=>",$={
+match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)],
+keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]}
+;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{
+PARAMS_CONTAINS:w,CLASS_REFERENCE:x},illegal:/#(?![$_A-z])/,
+contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
+label:"use_strict",className:"meta",relevance:10,
+begin:/^\s*['"]use (strict|asm)['"]/
+},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,p,N,f,_,h,{match:/\$\d+/},A,x,{
+scope:"attr",match:d+l.lookahead(":"),relevance:0},$,{
+begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+keywords:"return throw case",relevance:0,contains:[h,o.REGEXP_MODE,{
+className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{
+className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{
+className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
+excludeBegin:!0,excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0
+},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:">"},{
+match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,
+"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{
+begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},O,{
+beginKeywords:"while if switch catch for"},{
+begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:d,
+className:"title.function"})]},{match:/\.\.\./,relevance:0},T,{match:"\\$"+d,
+relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
+contains:[R]},I,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+className:"variable.constant"},k,M,{match:/\$[(.]/}]}}return t=>{
+const s=t.regex,c=o(t),l=e,d=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],b={
+begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}
+},g={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{
+keyword:"interface extends",built_in:d},contains:[c.exports.CLASS_REFERENCE]
+},u={$pattern:e,
+keyword:n.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]),
+literal:a,built_in:i.concat(d),"variable.language":r},m={className:"meta",
+begin:"@"+l},E=(e,n,a)=>{const t=e.contains.findIndex((e=>e.label===n))
+;if(-1===t)throw Error("can not find mode to replace");e.contains.splice(t,1,a)}
+;Object.assign(c.keywords,u),c.exports.PARAMS_CONTAINS.push(m)
+;const A=c.contains.find((e=>"attr"===e.scope)),y=Object.assign({},A,{
+match:s.concat(l,s.lookahead(/\s*\?:/))})
+;return c.exports.PARAMS_CONTAINS.push([c.exports.CLASS_REFERENCE,A,y]),
+c.contains=c.contains.concat([m,b,g,y]),
+E(c,"shebang",t.SHEBANG()),E(c,"use_strict",{className:"meta",relevance:10,
+begin:/^\s*['"]use strict['"]/
+}),c.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(c,{
+name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),c}})()
+;hljs.registerLanguage("typescript",e)})();/*! `xml` grammar compiled for Highlight.js 11.11.1 */
+(()=>{var e=(()=>{"use strict";return e=>{
+const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={
+className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},t={begin:/\s/,
+contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
+},i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{
+className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={
+endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",
+begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{
+className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[s]},{
+begin:/'/,end:/'/,contains:[s]},{begin:/[^\s"'=<>`]+/}]}]}]};return{
+name:"HTML, XML",
+aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
+case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{
+className:"meta",begin://,contains:[t,i,l,c]}]}]
+},e.COMMENT(//,{relevance:10}),{begin://,
+relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,
+relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",
+begin:/