@dcl/asset-packs 1.2.1 → 1.2.2-20231010134915.commit-6abb6ed

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +0,0 @@
1
- import { name, version } from '../package.json';
2
- import { createComponents, initComponents } from './definitions';
3
- import { createActionsSystem } from './actions';
4
- import { createTriggersSystem } from './triggers';
5
- export function initAssetPacks(_engine, _pointerEventsSystem, components) {
6
- const engine = _engine;
7
- const pointerEventsSystem = _pointerEventsSystem;
8
- console.log(`Using ${name}@${version}`);
9
- try {
10
- createComponents(engine);
11
- engine.addSystem(createActionsSystem(engine, components));
12
- engine.addSystem(createTriggersSystem(engine, pointerEventsSystem));
13
- initComponents(engine);
14
- }
15
- catch (error) {
16
- console.error(`Error initializing Asset Packs: ${error.message}`);
17
- }
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtZW50cnlwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2VuZS1lbnRyeXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRWpELE1BQU0sVUFBVSxjQUFjLENBQzVCLE9BQVksRUFDWixvQkFBeUIsRUFDekIsVUFPQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQWtCLENBQUE7SUFDakMsTUFBTSxtQkFBbUIsR0FBRyxvQkFBMkMsQ0FBQTtJQUN2RSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdkMsSUFBSTtRQUNGLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDekQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFBO1FBQ25FLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtLQUN2QjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBb0MsS0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7S0FDN0U7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUVuZ2luZSwgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IG5hbWUsIHZlcnNpb24gfSBmcm9tICcuLi9wYWNrYWdlLmpzb24nXG5pbXBvcnQgeyBjcmVhdGVDb21wb25lbnRzLCBpbml0Q29tcG9uZW50cyB9IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25zU3lzdGVtIH0gZnJvbSAnLi9hY3Rpb25zJ1xuaW1wb3J0IHsgY3JlYXRlVHJpZ2dlcnNTeXN0ZW0gfSBmcm9tICcuL3RyaWdnZXJzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFzc2V0UGFja3MoXG4gIF9lbmdpbmU6IGFueSxcbiAgX3BvaW50ZXJFdmVudHNTeXN0ZW06IGFueSxcbiAgY29tcG9uZW50czoge1xuICAgIEFuaW1hdG9yOiBhbnlcbiAgICBUcmFuc2Zvcm06IGFueVxuICAgIEF1ZGlvU291cmNlOiBhbnlcbiAgICBBdmF0YXJBdHRhY2g6IGFueVxuICAgIFZpc2liaWxpdHlDb21wb25lbnQ6IGFueVxuICAgIEdsdGZDb250YWluZXI6IGFueVxuICB9LFxuKSB7XG4gIGNvbnN0IGVuZ2luZSA9IF9lbmdpbmUgYXMgSUVuZ2luZVxuICBjb25zdCBwb2ludGVyRXZlbnRzU3lzdGVtID0gX3BvaW50ZXJFdmVudHNTeXN0ZW0gYXMgUG9pbnRlckV2ZW50c1N5c3RlbVxuICBjb25zb2xlLmxvZyhgVXNpbmcgJHtuYW1lfUAke3ZlcnNpb259YClcbiAgdHJ5IHtcbiAgICBjcmVhdGVDb21wb25lbnRzKGVuZ2luZSlcbiAgICBlbmdpbmUuYWRkU3lzdGVtKGNyZWF0ZUFjdGlvbnNTeXN0ZW0oZW5naW5lLCBjb21wb25lbnRzKSlcbiAgICBlbmdpbmUuYWRkU3lzdGVtKGNyZWF0ZVRyaWdnZXJzU3lzdGVtKGVuZ2luZSwgcG9pbnRlckV2ZW50c1N5c3RlbSkpXG4gICAgaW5pdENvbXBvbmVudHMoZW5naW5lKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluaXRpYWxpemluZyBBc3NldCBQYWNrczogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YClcbiAgfVxufVxuIl19
@@ -1,18 +0,0 @@
1
- export function isValidState(states, value) {
2
- return !!value && states.value.includes(value);
3
- }
4
- export function getCurrentValue(states) {
5
- if (isValidState(states, states.currentValue)) {
6
- return states.currentValue;
7
- }
8
- return getDefaultValue(states);
9
- }
10
- export function getDefaultValue(states) {
11
- if (isValidState(states, states.defaultValue)) {
12
- return states.defaultValue;
13
- }
14
- if (states.value.length > 0) {
15
- return states.value[0];
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUF5QjtJQUNwRSxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYztJQUM1QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzdDLE9BQU8sTUFBTSxDQUFDLFlBQWEsQ0FBQTtLQUM1QjtJQUNELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWM7SUFDNUMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM3QyxPQUFPLE1BQU0sQ0FBQyxZQUFhLENBQUE7S0FDNUI7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMzQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDdkI7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdGVzIH0gZnJvbSAnLi9kZWZpbml0aW9ucydcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTdGF0ZShzdGF0ZXM6IFN0YXRlcywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gISF2YWx1ZSAmJiBzdGF0ZXMudmFsdWUuaW5jbHVkZXModmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWUoc3RhdGVzOiBTdGF0ZXMpIHtcbiAgaWYgKGlzVmFsaWRTdGF0ZShzdGF0ZXMsIHN0YXRlcy5jdXJyZW50VmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0YXRlcy5jdXJyZW50VmFsdWUhXG4gIH1cbiAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZShzdGF0ZXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc3RhdGVzOiBTdGF0ZXMpIHtcbiAgaWYgKGlzVmFsaWRTdGF0ZShzdGF0ZXMsIHN0YXRlcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0YXRlcy5kZWZhdWx0VmFsdWUhXG4gIH1cbiAgaWYgKHN0YXRlcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHN0YXRlcy52YWx1ZVswXVxuICB9XG59XG4iXX0=
@@ -1,191 +0,0 @@
1
- import { triggers, LAYER_1, NO_LAYERS } from '@dcl-sdk/utils';
2
- import { ComponentName, TriggerConditionOperation, TriggerConditionType, TriggerType, getConditionTypesByComponentName, getComponents, } from './definitions';
3
- import { getCurrentValue } from './states';
4
- import { getActionEvents, getTriggerEvents } from './events';
5
- import { getPayload } from './action-types';
6
- const initedEntities = new Set();
7
- const actionQueue = [];
8
- export function createTriggersSystem(engine, pointerEventsSystem) {
9
- const { Actions, States, Counter, Triggers } = getComponents(engine);
10
- return function triggersSystem(_dt) {
11
- while (actionQueue.length > 0) {
12
- const { entity, action } = actionQueue.shift();
13
- const actionEvents = getActionEvents(entity);
14
- actionEvents.emit(action.name, getPayload(action));
15
- }
16
- const entitiesWithTriggers = engine.getEntitiesWith(Triggers);
17
- for (const [entity, triggers] of entitiesWithTriggers) {
18
- if (initedEntities.has(entity)) {
19
- continue;
20
- }
21
- const types = triggers.value.reduce((types, trigger) => types.add(trigger.type), new Set());
22
- for (const type of types) {
23
- switch (type) {
24
- case TriggerType.ON_CLICK: {
25
- initOnClickTrigger(entity);
26
- break;
27
- }
28
- case TriggerType.ON_PLAYER_ENTERS_AREA:
29
- case TriggerType.ON_PLAYER_LEAVES_AREA: {
30
- initOnPlayerTriggerArea(entity);
31
- break;
32
- }
33
- }
34
- }
35
- const triggerEvents = getTriggerEvents(entity);
36
- for (const trigger of triggers.value) {
37
- triggerEvents.on(trigger.type, () => {
38
- if (checkConditions(trigger)) {
39
- for (const triggerAction of trigger.actions) {
40
- if (isValidAction(triggerAction)) {
41
- const entity = getEntityByAction(triggerAction);
42
- if (entity) {
43
- const actions = Actions.getOrNull(entity);
44
- if (actions) {
45
- const action = actions.value.find(($) => $.name === triggerAction.name);
46
- if (action) {
47
- actionQueue.push({ entity, action });
48
- }
49
- }
50
- }
51
- }
52
- }
53
- }
54
- });
55
- }
56
- triggerEvents.emit(TriggerType.ON_SPAWN);
57
- initedEntities.add(entity);
58
- }
59
- };
60
- function isValidAction(action) {
61
- const { id, name } = action;
62
- return !!id && !!name;
63
- }
64
- function checkConditions(trigger) {
65
- if (trigger.conditions && trigger.conditions.length > 0) {
66
- const conditions = trigger.conditions.map(checkCondition);
67
- const isTrue = (result) => !!result;
68
- const operation = trigger.operation || TriggerConditionOperation.AND;
69
- switch (operation) {
70
- case TriggerConditionOperation.AND: {
71
- return conditions.every(isTrue);
72
- }
73
- case TriggerConditionOperation.OR: {
74
- return conditions.some(isTrue);
75
- }
76
- }
77
- }
78
- return true;
79
- }
80
- function checkCondition(condition) {
81
- const entity = getEntityByCondition(condition);
82
- if (entity) {
83
- try {
84
- switch (condition.type) {
85
- case TriggerConditionType.WHEN_STATE_IS: {
86
- const states = States.getOrNull(entity);
87
- if (states !== null) {
88
- const currentValue = getCurrentValue(states);
89
- return currentValue === condition.value;
90
- }
91
- break;
92
- }
93
- case TriggerConditionType.WHEN_STATE_IS_NOT: {
94
- const states = States.getOrNull(entity);
95
- if (states !== null) {
96
- const currentValue = getCurrentValue(states);
97
- return currentValue !== condition.value;
98
- }
99
- break;
100
- }
101
- case TriggerConditionType.WHEN_COUNTER_EQUALS: {
102
- const counter = Counter.getOrNull(entity);
103
- if (counter !== null) {
104
- const numeric = Number(condition.value);
105
- if (!isNaN(numeric)) {
106
- return counter.value === numeric;
107
- }
108
- }
109
- break;
110
- }
111
- case TriggerConditionType.WHEN_COUNTER_IS_GREATER_THAN: {
112
- const counter = Counter.getOrNull(entity);
113
- if (counter !== null) {
114
- const numeric = Number(condition.value);
115
- if (!isNaN(numeric)) {
116
- return counter.value > numeric;
117
- }
118
- }
119
- break;
120
- }
121
- case TriggerConditionType.WHEN_COUNTER_IS_LESS_THAN: {
122
- const counter = Counter.getOrNull(entity);
123
- if (counter !== null) {
124
- const numeric = Number(condition.value);
125
- if (!isNaN(numeric)) {
126
- return counter.value < numeric;
127
- }
128
- }
129
- break;
130
- }
131
- }
132
- }
133
- catch (error) {
134
- console.error('Error in condition', condition);
135
- }
136
- }
137
- return false;
138
- }
139
- function getEntityById(componentName, id) {
140
- const Component = engine.getComponent(componentName);
141
- const entities = Array.from(engine.getEntitiesWith(Component));
142
- const result = entities.find(([_entity, value]) => value.id === id);
143
- return Array.isArray(result) && result.length > 0 ? result[0] : null;
144
- }
145
- function getEntityByAction(action) {
146
- if (action.id) {
147
- const entity = getEntityById(ComponentName.ACTIONS, action.id);
148
- if (entity) {
149
- return entity;
150
- }
151
- }
152
- return null;
153
- }
154
- function getEntityByCondition(condition) {
155
- const componentName = Object.values(ComponentName)
156
- .map((componentName) => ({
157
- componentName,
158
- conditionTypes: getConditionTypesByComponentName(componentName),
159
- }))
160
- .reduce((result, { componentName, conditionTypes }) => conditionTypes.includes(condition.type) ? componentName : result, null);
161
- if (componentName && condition.id) {
162
- const entity = getEntityById(componentName, condition.id);
163
- if (entity) {
164
- return entity;
165
- }
166
- }
167
- return null;
168
- }
169
- function initOnClickTrigger(entity) {
170
- pointerEventsSystem.onPointerDown({
171
- entity,
172
- opts: {
173
- button: 0,
174
- hoverText: 'Click',
175
- },
176
- }, () => {
177
- const triggerEvents = getTriggerEvents(entity);
178
- triggerEvents.emit(TriggerType.ON_CLICK);
179
- });
180
- }
181
- function initOnPlayerTriggerArea(entity) {
182
- triggers.addTrigger(entity, NO_LAYERS, LAYER_1, [{ type: 'box' }], () => {
183
- const triggerEvents = getTriggerEvents(entity);
184
- triggerEvents.emit(TriggerType.ON_PLAYER_ENTERS_AREA);
185
- }, () => {
186
- const triggerEvents = getTriggerEvents(entity);
187
- triggerEvents.emit(TriggerType.ON_PLAYER_LEAVES_AREA);
188
- });
189
- }
190
- }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJpZ2dlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0QsT0FBTyxFQUVMLGFBQWEsRUFJYix5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxnQ0FBZ0MsRUFDaEMsYUFBYSxHQUNkLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtBQUN4QyxNQUFNLFdBQVcsR0FBeUMsRUFBRSxDQUFBO0FBRTVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBZSxFQUNmLG1CQUF3QztJQUV4QyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BFLE9BQU8sU0FBUyxjQUFjLENBQUMsR0FBVztRQUV4QyxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRyxDQUFBO1lBQy9DLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM1QyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDbkQ7UUFFRCxNQUFNLG9CQUFvQixHQUFH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QUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQ3ZELENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1FBQ3ZELENBQUMsQ0FDRixDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJRW5naW5lLFxuICBFbnRpdHksXG4gIFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIElucHV0QWN0aW9uLFxuICBMYXN0V3JpdGVXaW5FbGVtZW50U2V0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgRGVlcFJlYWRvbmx5T2JqZWN0LFxufSBmcm9tICdAZGNsL3Nkay9lY3MnXG5pbXBvcnQgeyB0cmlnZ2VycywgTEFZRVJfMSwgTk9fTEFZRVJTIH0gZnJvbSAnQGRjbC1zZGsvdXRpbHMnXG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbXBvbmVudE5hbWUsXG4gIFRyaWdnZXIsXG4gIFRyaWdnZXJBY3Rpb24sXG4gIFRyaWdnZXJDb25kaXRpb24sXG4gIFRyaWdnZXJDb25kaXRpb25PcGVyYXRpb24sXG4gIFRyaWdnZXJDb25kaXRpb25UeXBlLFxuICBUcmlnZ2VyVHlwZSxcbiAgZ2V0Q29uZGl0aW9uVHlwZXNCeUNvbXBvbmVudE5hbWUsXG4gIGdldENvbXBvbmVudHMsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXRDdXJyZW50VmFsdWUgfSBmcm9tICcuL3N0YXRlcydcbmltcG9ydCB7IGdldEFjdGlvbkV2ZW50cywgZ2V0VHJpZ2dlckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzJ1xuaW1wb3J0IHsgZ2V0UGF5bG9hZCB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJ1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpXG5jb25zdCBhY3Rpb25RdWV1ZTogeyBlbnRpdHk6IEVudGl0eTsgYWN0aW9uOiBBY3Rpb24gfVtdID0gW11cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyaWdnZXJzU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4pIHtcbiAgY29uc3QgeyBBY3Rpb25zLCBTdGF0ZXMsIENvdW50ZXIsIFRyaWdnZXJzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaWdnZXJzU3lzdGVtKF9kdDogbnVtYmVyKSB7XG4gICAgLy8gcHJvY2VzcyBhY3Rpb24gcXVldWVcbiAgICB3aGlsZSAoYWN0aW9uUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBlbnRpdHksIGFjdGlvbiB9ID0gYWN0aW9uUXVldWUuc2hpZnQoKSFcbiAgICAgIGNvbnN0IGFjdGlvbkV2ZW50cyA9IGdldEFjdGlvbkV2ZW50cyhlbnRpdHkpXG4gICAgICBhY3Rpb25FdmVudHMuZW1pdChhY3Rpb24ubmFtZSwgZ2V0UGF5bG9hZChhY3Rpb24pKVxuICAgIH1cblxuICAgIGNvbnN0IGVudGl0aWVzV2l0aFRyaWdnZXJzID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChUcmlnZ2VycylcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIHRyaWdnZXJzXSBvZiBlbnRpdGllc1dpdGhUcmlnZ2Vycykge1xuICAgICAgaWYgKGluaXRlZEVudGl0aWVzLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGluaXRpYWxpemUgdHJpZ2dlcnMgZm9yIGdpdmVuIGVudGl0eVxuICAgICAgY29uc3QgdHlwZXMgPSB0cmlnZ2Vycy52YWx1ZS5yZWR1Y2UoXG4gICAgICAgICh0eXBlcywgdHJpZ2dlcikgPT4gdHlwZXMuYWRkKHRyaWdnZXIudHlwZSksXG4gICAgICAgIG5ldyBTZXQ8VHJpZ2dlclR5cGU+KCksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBUcmlnZ2VyVHlwZS5PTl9DTElDSzoge1xuICAgICAgICAgICAgaW5pdE9uQ2xpY2tUcmlnZ2VyKGVudGl0eSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVHJpZ2dlclR5cGUuT05fUExBWUVSX0VOVEVSU19BUkVBOlxuICAgICAgICAgIGNhc2UgVHJpZ2dlclR5cGUuT05fUExBWUVSX0xFQVZFU19BUkVBOiB7XG4gICAgICAgICAgICBpbml0T25QbGF5ZXJUcmlnZ2VyQXJlYShlbnRpdHkpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBiaW5kIHRyaWdnZXJzXG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMudmFsdWUpIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50cy5vbih0cmlnZ2VyLnR5cGUsICgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tDb25kaXRpb25zKHRyaWdnZXIpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRyaWdnZXJBY3Rpb24gb2YgdHJpZ2dlci5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChpc1ZhbGlkQWN0aW9uKHRyaWdnZXJBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gZ2V0RW50aXR5QnlBY3Rpb24odHJpZ2dlckFjdGlvbilcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gQWN0aW9ucy5nZXRPck51bGwoZW50aXR5KVxuICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy52YWx1ZS5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICgkKSA9PiAkLm5hbWUgPT09IHRyaWdnZXJBY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWN0aW9ucyBhcmUgZW5xdWV1ZWQgdG8gYmUgZXhlY3V0ZWQgb24gdGhlIG5leHQgdGljayBhZnRlciBhbGwgdGhlIHRyaWdnZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBhdm9pZCBvbmUgdHJpZ2dlciBtZXNzaW5nIHdpdGggb3RoZXIgdHJpZ2dlcidzIGNvbmRpdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25RdWV1ZS5wdXNoKHsgZW50aXR5LCBhY3Rpb24gfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9TUEFXTilcblxuICAgICAgaW5pdGVkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1ZhbGlkQWN0aW9uKGFjdGlvbjogVHJpZ2dlckFjdGlvbikge1xuICAgIGNvbnN0IHsgaWQsIG5hbWUgfSA9IGFjdGlvblxuICAgIHJldHVybiAhIWlkICYmICEhbmFtZVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tDb25kaXRpb25zKHRyaWdnZXI6IERlZXBSZWFkb25seU9iamVjdDxUcmlnZ2VyPikge1xuICAgIGlmICh0cmlnZ2VyLmNvbmRpdGlvbnMgJiYgdHJpZ2dlci5jb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0cmlnZ2VyLmNvbmRpdGlvbnMubWFwKGNoZWNrQ29uZGl0aW9uKVxuICAgICAgY29uc3QgaXNUcnVlID0gKHJlc3VsdD86IGJvb2xlYW4pID0+ICEhcmVzdWx0XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB0cmlnZ2VyLm9wZXJhdGlvbiB8fCBUcmlnZ2VyQ29uZGl0aW9uT3BlcmF0aW9uLkFORFxuICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgY2FzZSBUcmlnZ2VyQ29uZGl0aW9uT3BlcmF0aW9uLkFORDoge1xuICAgICAgICAgIHJldHVybiBjb25kaXRpb25zLmV2ZXJ5KGlzVHJ1ZSlcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFRyaWdnZXJDb25kaXRpb25PcGVyYXRpb24uT1I6IHtcbiAgICAgICAgICByZXR1cm4gY29uZGl0aW9ucy5zb21lKGlzVHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gY29uZGl0aW9ucywgdGhlIHRyaWdnZXIgY2FuIGNvbnRpbnVlXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrQ29uZGl0aW9uKGNvbmRpdGlvbjogVHJpZ2dlckNvbmRpdGlvbikge1xuICAgIGNvbnN0IGVudGl0eSA9IGdldEVudGl0eUJ5Q29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICBpZiAoZW50aXR5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICAgICAgY2FzZSBUcmlnZ2VyQ29uZGl0aW9uVHlwZS5XSEVOX1NUQVRFX0lTOiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgICAgICAgIGlmIChzdGF0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKHN0YXRlcylcbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZSA9PT0gY29uZGl0aW9uLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFRyaWdnZXJDb25kaXRpb25UeXBlLldIRU5fU1RBVEVfSVNfTk9UOiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgICAgICAgIGlmIChzdGF0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKHN0YXRlcylcbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZSAhPT0gY29uZGl0aW9uLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFRyaWdnZXJDb25kaXRpb25UeXBlLldIRU5fQ09VTlRFUl9FUVVBTFM6IHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSBDb3VudGVyLmdldE9yTnVsbChlbnRpdHkpXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBudW1lcmljID0gTnVtYmVyKGNvbmRpdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgaWYgKCFpc05hTihudW1lcmljKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyLnZhbHVlID09PSBudW1lcmljXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVHJpZ2dlckNvbmRpdGlvblR5cGUuV0hFTl9DT1VOVEVSX0lTX0dSRUFURVJfVEhBTjoge1xuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgICAgICAgIGlmIChjb3VudGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG51bWVyaWMgPSBOdW1iZXIoY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKG51bWVyaWMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIudmFsdWUgPiBudW1lcmljXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVHJpZ2dlckNvbmRpdGlvblR5cGUuV0hFTl9DT1VOVEVSX0lTX0xFU1NfVEhBTjoge1xuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IENvdW50ZXIuZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgICAgICAgIGlmIChjb3VudGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG51bWVyaWMgPSBOdW1iZXIoY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKG51bWVyaWMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIudmFsdWUgPCBudW1lcmljXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBjb25kaXRpb24nLCBjb25kaXRpb24pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RW50aXR5QnlJZDxUIGV4dGVuZHMgeyBpZDogbnVtYmVyIH0+KFxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgICBpZDogbnVtYmVyLFxuICApIHtcbiAgICBjb25zdCBDb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KFxuICAgICAgY29tcG9uZW50TmFtZSxcbiAgICApIGFzIExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFQ+XG4gICAgY29uc3QgZW50aXRpZXMgPSBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQ29tcG9uZW50KSlcbiAgICBjb25zdCByZXN1bHQgPSBlbnRpdGllcy5maW5kKChbX2VudGl0eSwgdmFsdWVdKSA9PiB2YWx1ZS5pZCA9PT0gaWQpXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCA/IHJlc3VsdFswXSA6IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVudGl0eUJ5QWN0aW9uKGFjdGlvbjogVHJpZ2dlckFjdGlvbikge1xuICAgIGlmIChhY3Rpb24uaWQpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IGdldEVudGl0eUJ5SWQoQ29tcG9uZW50TmFtZS5BQ1RJT05TLCBhY3Rpb24uaWQpXG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHJldHVybiBlbnRpdHlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVudGl0eUJ5Q29uZGl0aW9uKGNvbmRpdGlvbjogVHJpZ2dlckNvbmRpdGlvbikge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBPYmplY3QudmFsdWVzKENvbXBvbmVudE5hbWUpXG4gICAgICAubWFwKChjb21wb25lbnROYW1lKSA9PiAoe1xuICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICBjb25kaXRpb25UeXBlczogZ2V0Q29uZGl0aW9uVHlwZXNCeUNvbXBvbmVudE5hbWUoY29tcG9uZW50TmFtZSksXG4gICAgICB9KSlcbiAgICAgIC5yZWR1Y2U8Q29tcG9uZW50TmFtZSB8IG51bGw+KFxuICAgICAgICAocmVzdWx0LCB7IGNvbXBvbmVudE5hbWUsIGNvbmRpdGlvblR5cGVzIH0pID0+XG4gICAgICAgICAgY29uZGl0aW9uVHlwZXMuaW5jbHVkZXMoY29uZGl0aW9uLnR5cGUpID8gY29tcG9uZW50TmFtZSA6IHJlc3VsdCxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICBpZiAoY29tcG9uZW50TmFtZSAmJiBjb25kaXRpb24uaWQpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IGdldEVudGl0eUJ5SWQoY29tcG9uZW50TmFtZSwgY29uZGl0aW9uLmlkKVxuICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICByZXR1cm4gZW50aXR5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBPTl9DTElDS1xuICBmdW5jdGlvbiBpbml0T25DbGlja1RyaWdnZXIoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBwb2ludGVyRXZlbnRzU3lzdGVtLm9uUG9pbnRlckRvd24oXG4gICAgICB7XG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgb3B0czoge1xuICAgICAgICAgIGJ1dHRvbjogSW5wdXRBY3Rpb24uSUFfUE9JTlRFUixcbiAgICAgICAgICBob3ZlclRleHQ6ICdDbGljaycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DTElDSylcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdE9uUGxheWVyVHJpZ2dlckFyZWEoZW50aXR5OiBFbnRpdHkpIHtcbiAgICB0cmlnZ2Vycy5hZGRUcmlnZ2VyKFxuICAgICAgZW50aXR5LFxuICAgICAgTk9fTEFZRVJTLFxuICAgICAgTEFZRVJfMSxcbiAgICAgIFt7IHR5cGU6ICdib3gnIH1dLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9QTEFZRVJfRU5URVJTX0FSRUEpXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9QTEFZRVJfTEVBVkVTX0FSRUEpXG4gICAgICB9LFxuICAgIClcbiAgfVxufSJdfQ==
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes