From b1c109a0ea8fd73c6167f850c741c090b96d799b Mon Sep 17 00:00:00 2001 From: znotfireman Date: Wed, 10 Jun 2026 16:00:53 +0700 Subject: [PATCH 1/2] feat: lets have one more dance --- .config.luau | 12 + .luaurc | 12 - .lune/build.luau | 425 ------------------ .lune/lib/configure.luau | 81 ---- .lune/lib/root-config.luau | 2 - .lune/lib/tiniest/tiniest.luau | 219 --------- .lune/lib/tiniest/tiniest_expect.luau | 147 ------ .lune/lib/tiniest/tiniest_for_lune.luau | 114 ----- .lune/lib/tiniest/tiniest_plugin.luau | 36 -- .lune/lib/tiniest/tiniest_pretty.luau | 228 ---------- .lune/lib/tiniest/tiniest_quote.luau | 40 -- .lune/lib/tiniest/tiniest_snapshot.luau | 159 ------- .lune/lib/tiniest/tiniest_time.luau | 86 ---- .lune/lib/types.luau | 17 - .lune/lib/utils/collect-packages.luau | 37 -- .lune/lib/utils/path.luau | 9 - .lune/lib/utils/print-divider.luau | 14 - .lune/lib/utils/select-packages.luau | 42 -- .lune/lib/utils/styles.luau | 40 -- .../roblox_sync_config_generator.luau | 1 - .lune/pesde-scripts/sourcemap-generator.luau | 1 - .lune/publish.luau | 0 .lune/tiniest.luau | 25 -- .zed/settings.json | 18 - LICENSE.md | 355 --------------- README.md | 162 ------- .../src => dependencies}/depend.luau | 10 +- dependencies/init.luau | 12 + .../src => dependencies}/logger.luau | 4 +- .../process-dependencies.luau | 4 +- .../sort-by-priority.luau | 6 +- .../src => dependencies}/types.luau | 0 dist/bundle.rbxl | Bin 22500 -> 0 bytes dist/bundle.rbxm | Bin 22396 -> 0 bytes dist/models/dependencies.rbxm | Bin 3238 -> 0 bytes dist/models/lifecycles.rbxm | Bin 3369 -> 0 bytes dist/models/logger.rbxm | Bin 2126 -> 0 bytes dist/models/providers.rbxm | Bin 1135 -> 0 bytes dist/models/prvdmwrong.rbxm | Bin 961 -> 0 bytes dist/models/rbx-components.rbxm | Bin 4961 -> 0 bytes dist/models/rbx-lifecycles.rbxm | Bin 1214 -> 0 bytes dist/models/roots.rbxm | Bin 5189 -> 0 bytes dist/models/runtime.rbxm | Bin 4655 -> 0 bytes dist/models/typecheckers.rbxm | Bin 218 -> 0 bytes dist/npm/dependencies/LICENSE.md | 355 --------------- dist/npm/dependencies/lifecycles.luau | 3 - dist/npm/dependencies/logger.luau | 5 - dist/npm/dependencies/package.json | 24 - dist/npm/dependencies/src/depend.luau | 30 -- dist/npm/dependencies/src/index.d.ts | 25 -- dist/npm/dependencies/src/init.luau | 12 - dist/npm/dependencies/src/logger.luau | 7 - .../src/process-dependencies.spec.luau | 67 --- .../dependencies/src/sort-by-priority.luau | 14 - .../src/sort-by-priority.spec.luau | 52 --- dist/npm/lifecycles/LICENSE.md | 355 --------------- dist/npm/lifecycles/logger.luau | 5 - dist/npm/lifecycles/package.json | 24 - dist/npm/lifecycles/runtime.luau | 3 - dist/npm/lifecycles/src/create.luau | 45 -- dist/npm/lifecycles/src/index.d.ts | 45 -- dist/npm/lifecycles/src/init.luau | 28 -- .../lifecycles/src/method-to-lifecycles.luau | 5 - dist/npm/logger/LICENSE.md | 355 --------------- dist/npm/logger/package.json | 23 - dist/npm/logger/runtime.luau | 3 - dist/npm/logger/src/allow-web-links.luau | 5 - dist/npm/logger/src/create.luau | 32 -- dist/npm/logger/src/format-log.luau | 43 -- dist/npm/logger/src/index.d.ts | 45 -- dist/npm/logger/src/init.luau | 18 - dist/npm/logger/src/parse-error.luau | 12 - dist/npm/providers/LICENSE.md | 355 --------------- dist/npm/providers/dependencies.luau | 3 - dist/npm/providers/lifecycles.luau | 3 - dist/npm/providers/logger.luau | 5 - dist/npm/providers/package.json | 26 -- dist/npm/providers/runtime.luau | 3 - dist/npm/providers/src/create.luau | 30 -- dist/npm/providers/src/index.d.ts | 36 -- dist/npm/providers/src/init.luau | 16 - dist/npm/providers/src/name-of.luau | 7 - dist/npm/prvdmwrong/LICENSE.md | 355 --------------- dist/npm/prvdmwrong/dependencies.luau | 3 - dist/npm/prvdmwrong/lifecycles.luau | 3 - dist/npm/prvdmwrong/package.json | 26 -- dist/npm/prvdmwrong/providers.luau | 3 - dist/npm/prvdmwrong/roots.luau | 4 - dist/npm/prvdmwrong/src/index.d.ts | 42 -- dist/npm/prvdmwrong/src/init.luau | 45 -- dist/npm/rbx-components/LICENSE.md | 355 --------------- dist/npm/rbx-components/dependencies.luau | 3 - dist/npm/rbx-components/logger.luau | 5 - dist/npm/rbx-components/package.json | 26 -- dist/npm/rbx-components/providers.luau | 3 - dist/npm/rbx-components/roots.luau | 4 - .../rbx-components/src/component-classes.luau | 7 - .../src/component-provider.luau | 185 -------- dist/npm/rbx-components/src/create.luau | 28 -- dist/npm/rbx-components/src/logger.luau | 8 - dist/npm/rbx-components/src/types.luau | 30 -- dist/npm/rbx-lifecycles/LICENSE.md | 355 --------------- dist/npm/rbx-lifecycles/package.json | 23 - dist/npm/rbx-lifecycles/prvdmwrong.luau | 6 - dist/npm/rbx-lifecycles/src/index.d.ts | 40 -- dist/npm/rbx-lifecycles/src/init.luau | 67 --- dist/npm/roots/LICENSE.md | 355 --------------- dist/npm/roots/dependencies.luau | 3 - dist/npm/roots/lifecycles.luau | 3 - dist/npm/roots/logger.luau | 5 - dist/npm/roots/package.json | 27 -- dist/npm/roots/providers.luau | 3 - dist/npm/roots/runtime.luau | 3 - dist/npm/roots/src/create.luau | 47 -- dist/npm/roots/src/index.d.ts | 45 -- dist/npm/roots/src/init.luau | 28 -- dist/npm/roots/src/logger.luau | 7 - dist/npm/roots/src/types.luau | 40 -- dist/npm/runtime/LICENSE.md | 355 --------------- dist/npm/runtime/package.json | 21 - dist/npm/runtime/src/index.d.ts | 47 -- dist/npm/runtime/src/init.luau | 15 - dist/npm/typecheckers/LICENSE.md | 355 --------------- dist/npm/typecheckers/package.json | 21 - dist/npm/typecheckers/src/init.luau | 0 dist/pesde/luau/dependencies/LICENSE.md | 355 --------------- dist/pesde/luau/dependencies/lifecycles.luau | 3 - dist/pesde/luau/dependencies/logger.luau | 5 - dist/pesde/luau/dependencies/pesde.toml | 37 -- dist/pesde/luau/dependencies/src/index.d.ts | 25 -- dist/pesde/luau/dependencies/src/init.luau | 12 - .../src/process-dependencies.luau | 57 --- .../src/process-dependencies.spec.luau | 67 --- .../src/sort-by-priority.spec.luau | 52 --- dist/pesde/luau/dependencies/src/types.luau | 14 - dist/pesde/luau/lifecycles/LICENSE.md | 355 --------------- dist/pesde/luau/lifecycles/logger.luau | 5 - dist/pesde/luau/lifecycles/pesde.toml | 37 -- dist/pesde/luau/lifecycles/runtime.luau | 3 - dist/pesde/luau/lifecycles/src/create.luau | 45 -- .../src/handlers/fire-sequential.luau | 9 - .../src/hooks/lifecycle-destroyed.luau | 15 - .../src/hooks/lifecycle-registered.luau | 20 - .../src/hooks/lifecycle-unregistered.luau | 20 - dist/pesde/luau/lifecycles/src/index.d.ts | 45 -- dist/pesde/luau/lifecycles/src/init.luau | 28 -- dist/pesde/luau/lifecycles/src/logger.luau | 6 - .../src/methods/on-unregistered.luau | 17 - .../luau/lifecycles/src/methods/register.luau | 18 - .../src/methods/unregister-all.luau | 17 - .../lifecycles/src/methods/unregister.luau | 18 - dist/pesde/luau/lifecycles/src/types.luau | 23 - dist/pesde/luau/logger/LICENSE.md | 355 --------------- dist/pesde/luau/logger/pesde.toml | 30 -- dist/pesde/luau/logger/runtime.luau | 3 - dist/pesde/luau/logger/src/create.luau | 32 -- dist/pesde/luau/logger/src/format-log.luau | 43 -- dist/pesde/luau/logger/src/index.d.ts | 45 -- dist/pesde/luau/logger/src/init.luau | 18 - .../logger/src/standard-error-info-url.luau | 5 - dist/pesde/luau/logger/src/types.luau | 23 - dist/pesde/luau/providers/LICENSE.md | 355 --------------- dist/pesde/luau/providers/dependencies.luau | 3 - dist/pesde/luau/providers/lifecycles.luau | 3 - dist/pesde/luau/providers/logger.luau | 5 - dist/pesde/luau/providers/pesde.toml | 51 --- dist/pesde/luau/providers/runtime.luau | 3 - dist/pesde/luau/providers/src/create.luau | 30 -- dist/pesde/luau/providers/src/index.d.ts | 36 -- dist/pesde/luau/providers/src/init.luau | 16 - dist/pesde/luau/providers/src/name-of.luau | 7 - .../luau/providers/src/provider-classes.luau | 7 - dist/pesde/luau/providers/src/types.luau | 12 - dist/pesde/luau/prvdmwrong/LICENSE.md | 355 --------------- dist/pesde/luau/prvdmwrong/dependencies.luau | 3 - dist/pesde/luau/prvdmwrong/lifecycles.luau | 3 - dist/pesde/luau/prvdmwrong/pesde.toml | 51 --- dist/pesde/luau/prvdmwrong/providers.luau | 3 - dist/pesde/luau/prvdmwrong/roots.luau | 4 - dist/pesde/luau/prvdmwrong/src/index.d.ts | 42 -- dist/pesde/luau/prvdmwrong/src/init.luau | 45 -- dist/pesde/luau/rbx-components/LICENSE.md | 355 --------------- .../luau/rbx-components/dependencies.luau | 3 - dist/pesde/luau/rbx-components/logger.luau | 5 - dist/pesde/luau/rbx-components/pesde.toml | 51 --- dist/pesde/luau/rbx-components/providers.luau | 3 - dist/pesde/luau/rbx-components/roots.luau | 4 - .../rbx-components/src/component-classes.luau | 7 - .../src/component-provider.luau | 185 -------- .../pesde/luau/rbx-components/src/create.luau | 28 -- .../create-component-class-provider.luau | 31 -- .../rbx-components/src/extend-root/init.luau | 30 -- .../src/extend-root/use-component.luau | 8 - .../src/extend-root/use-components.luau | 10 - .../extend-root/use-module-as-component.luau | 12 - .../use-modules-as-components.luau | 28 -- dist/pesde/luau/rbx-components/src/init.luau | 24 - .../pesde/luau/rbx-components/src/logger.luau | 8 - dist/pesde/luau/roots/LICENSE.md | 355 --------------- dist/pesde/luau/roots/dependencies.luau | 3 - dist/pesde/luau/roots/lifecycles.luau | 3 - dist/pesde/luau/roots/logger.luau | 5 - dist/pesde/luau/roots/pesde.toml | 58 --- dist/pesde/luau/roots/providers.luau | 3 - dist/pesde/luau/roots/runtime.luau | 3 - dist/pesde/luau/roots/src/create.luau | 47 -- .../luau/roots/src/hooks/lifecycle-used.luau | 16 - .../luau/roots/src/hooks/provider-used.luau | 16 - .../roots/src/hooks/root-constructing.luau | 15 - .../luau/roots/src/hooks/root-destroyed.luau | 15 - .../luau/roots/src/hooks/root-started.luau | 15 - dist/pesde/luau/roots/src/index.d.ts | 45 -- dist/pesde/luau/roots/src/init.luau | 28 -- dist/pesde/luau/roots/src/logger.luau | 7 - .../pesde/luau/roots/src/methods/destroy.luau | 16 - dist/pesde/luau/roots/src/methods/start.luau | 102 ----- .../luau/roots/src/methods/use-lifecycle.luau | 14 - .../roots/src/methods/use-lifecycles.luau | 16 - .../luau/roots/src/methods/use-module.luau | 23 - .../luau/roots/src/methods/use-modules.luau | 28 -- .../luau/roots/src/methods/use-provider.luau | 14 - .../luau/roots/src/methods/use-providers.luau | 16 - .../luau/roots/src/methods/will-finish.luau | 8 - .../luau/roots/src/methods/will-start.luau | 8 - dist/pesde/luau/roots/src/types.luau | 40 -- dist/pesde/luau/runtime/LICENSE.md | 355 --------------- dist/pesde/luau/runtime/pesde.toml | 21 - .../runtime/src/batteries/threadpool.luau | 38 -- .../runtime/src/implementations/init.luau | 56 --- .../src/implementations/init.spec.luau | 81 ---- .../runtime/src/implementations/luau.luau | 9 - .../runtime/src/implementations/lune.luau | 10 - .../runtime/src/implementations/lute.luau | 8 - .../runtime/src/implementations/roblox.luau | 9 - .../runtime/src/implementations/seal.luau | 8 - .../runtime/src/implementations/zune.luau | 10 - dist/pesde/luau/runtime/src/index.d.ts | 47 -- dist/pesde/luau/runtime/src/init.luau | 15 - dist/pesde/luau/runtime/src/libs/task.luau | 157 ------- .../luau/runtime/src/libs/task.spec.luau | 62 --- dist/pesde/luau/runtime/src/libs/warn.luau | 27 -- dist/pesde/luau/runtime/src/types.luau | 13 - dist/pesde/luau/typecheckers/LICENSE.md | 355 --------------- dist/pesde/luau/typecheckers/pesde.toml | 21 - dist/pesde/luau/typecheckers/src/init.luau | 0 dist/pesde/lune/dependencies/LICENSE.md | 355 --------------- dist/pesde/lune/dependencies/lifecycles.luau | 3 - dist/pesde/lune/dependencies/logger.luau | 5 - dist/pesde/lune/dependencies/pesde.toml | 33 -- dist/pesde/lune/dependencies/src/depend.luau | 30 -- dist/pesde/lune/dependencies/src/index.d.ts | 25 -- dist/pesde/lune/dependencies/src/init.luau | 12 - dist/pesde/lune/dependencies/src/logger.luau | 7 - .../src/process-dependencies.luau | 57 --- .../src/process-dependencies.spec.luau | 67 --- .../dependencies/src/sort-by-priority.luau | 14 - .../src/sort-by-priority.spec.luau | 52 --- dist/pesde/lune/dependencies/src/types.luau | 14 - dist/pesde/lune/lifecycles/LICENSE.md | 355 --------------- dist/pesde/lune/lifecycles/logger.luau | 5 - dist/pesde/lune/lifecycles/pesde.toml | 33 -- dist/pesde/lune/lifecycles/runtime.luau | 3 - .../src/handlers/fire-concurrent.luau | 10 - .../src/handlers/fire-sequential.luau | 9 - .../src/hooks/lifecycle-constructed.luau | 15 - .../src/hooks/lifecycle-destroyed.luau | 15 - .../src/hooks/lifecycle-registered.luau | 20 - dist/pesde/lune/lifecycles/src/index.d.ts | 45 -- dist/pesde/lune/lifecycles/src/init.luau | 28 -- dist/pesde/lune/lifecycles/src/logger.luau | 6 - .../lifecycles/src/method-to-lifecycles.luau | 5 - .../lune/lifecycles/src/methods/await.luau | 17 - .../lune/lifecycles/src/methods/destroy.luau | 18 - .../lifecycles/src/methods/on-registered.luau | 17 - .../lune/lifecycles/src/methods/register.luau | 18 - .../src/methods/unregister-all.luau | 17 - dist/pesde/lune/lifecycles/src/types.luau | 23 - dist/pesde/lune/logger/LICENSE.md | 355 --------------- dist/pesde/lune/logger/pesde.toml | 28 -- dist/pesde/lune/logger/runtime.luau | 3 - .../lune/logger/src/allow-web-links.luau | 5 - dist/pesde/lune/logger/src/create.luau | 32 -- dist/pesde/lune/logger/src/index.d.ts | 45 -- dist/pesde/lune/logger/src/init.luau | 18 - dist/pesde/lune/logger/src/parse-error.luau | 12 - .../logger/src/standard-error-info-url.luau | 5 - dist/pesde/lune/logger/src/types.luau | 23 - dist/pesde/lune/providers/LICENSE.md | 355 --------------- dist/pesde/lune/providers/dependencies.luau | 3 - dist/pesde/lune/providers/lifecycles.luau | 3 - dist/pesde/lune/providers/logger.luau | 5 - dist/pesde/lune/providers/pesde.toml | 43 -- dist/pesde/lune/providers/runtime.luau | 3 - dist/pesde/lune/providers/src/create.luau | 30 -- dist/pesde/lune/providers/src/index.d.ts | 36 -- dist/pesde/lune/providers/src/init.luau | 16 - dist/pesde/lune/providers/src/name-of.luau | 7 - .../lune/providers/src/provider-classes.luau | 7 - dist/pesde/lune/providers/src/types.luau | 12 - dist/pesde/lune/prvdmwrong/LICENSE.md | 355 --------------- dist/pesde/lune/prvdmwrong/dependencies.luau | 3 - dist/pesde/lune/prvdmwrong/lifecycles.luau | 3 - dist/pesde/lune/prvdmwrong/pesde.toml | 43 -- dist/pesde/lune/prvdmwrong/providers.luau | 3 - dist/pesde/lune/prvdmwrong/roots.luau | 4 - dist/pesde/lune/prvdmwrong/src/index.d.ts | 42 -- dist/pesde/lune/rbx-components/LICENSE.md | 355 --------------- .../lune/rbx-components/dependencies.luau | 3 - dist/pesde/lune/rbx-components/logger.luau | 5 - dist/pesde/lune/rbx-components/pesde.toml | 43 -- dist/pesde/lune/rbx-components/providers.luau | 3 - dist/pesde/lune/rbx-components/roots.luau | 4 - .../src/component-provider.luau | 185 -------- .../rbx-components/src/extend-root/init.luau | 30 -- .../use-modules-as-components.luau | 28 -- dist/pesde/lune/rbx-components/src/init.luau | 24 - dist/pesde/lune/rbx-components/src/types.luau | 30 -- dist/pesde/lune/roots/LICENSE.md | 355 --------------- dist/pesde/lune/roots/dependencies.luau | 3 - dist/pesde/lune/roots/lifecycles.luau | 3 - dist/pesde/lune/roots/logger.luau | 5 - dist/pesde/lune/roots/pesde.toml | 48 -- dist/pesde/lune/roots/providers.luau | 3 - dist/pesde/lune/roots/runtime.luau | 3 - dist/pesde/lune/roots/src/create.luau | 47 -- .../lune/roots/src/hooks/root-destroyed.luau | 15 - .../lune/roots/src/hooks/root-finished.luau | 15 - .../lune/roots/src/hooks/root-started.luau | 15 - .../pesde/lune/roots/src/hooks/root-used.luau | 15 - dist/pesde/lune/roots/src/index.d.ts | 45 -- dist/pesde/lune/roots/src/init.luau | 28 -- .../pesde/lune/roots/src/methods/destroy.luau | 16 - .../roots/src/methods/use-lifecycles.luau | 16 - .../lune/roots/src/methods/use-providers.luau | 16 - .../lune/roots/src/methods/use-root.luau | 13 - .../lune/roots/src/methods/use-roots.luau | 15 - .../lune/roots/src/methods/will-finish.luau | 8 - .../lune/roots/src/methods/will-start.luau | 8 - dist/pesde/lune/runtime/LICENSE.md | 355 --------------- dist/pesde/lune/runtime/pesde.toml | 21 - .../runtime/src/implementations/init.luau | 56 --- .../src/implementations/init.spec.luau | 81 ---- .../runtime/src/implementations/luau.luau | 9 - .../runtime/src/implementations/lune.luau | 10 - .../runtime/src/implementations/lute.luau | 8 - .../runtime/src/implementations/roblox.luau | 9 - .../runtime/src/implementations/seal.luau | 8 - .../runtime/src/implementations/zune.luau | 10 - dist/pesde/lune/runtime/src/index.d.ts | 47 -- dist/pesde/lune/runtime/src/init.luau | 15 - dist/pesde/lune/runtime/src/libs/task.luau | 157 ------- .../lune/runtime/src/libs/task.spec.luau | 62 --- dist/pesde/lune/runtime/src/libs/warn.luau | 27 -- dist/pesde/lune/runtime/src/types.luau | 13 - dist/pesde/lune/typecheckers/LICENSE.md | 355 --------------- dist/pesde/lune/typecheckers/pesde.toml | 21 - dist/pesde/lune/typecheckers/src/init.luau | 0 .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/dependencies/LICENSE.md | 355 --------------- .../pesde/roblox/dependencies/lifecycles.luau | 3 - dist/pesde/roblox/dependencies/logger.luau | 5 - dist/pesde/roblox/dependencies/pesde.toml | 38 -- .../pesde/roblox/dependencies/src/depend.luau | 30 -- dist/pesde/roblox/dependencies/src/index.d.ts | 25 -- dist/pesde/roblox/dependencies/src/init.luau | 12 - .../pesde/roblox/dependencies/src/logger.luau | 7 - .../src/process-dependencies.luau | 57 --- .../src/process-dependencies.spec.luau | 67 --- .../dependencies/src/sort-by-priority.luau | 14 - .../src/sort-by-priority.spec.luau | 52 --- dist/pesde/roblox/dependencies/src/types.luau | 14 - .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/lifecycles/LICENSE.md | 355 --------------- dist/pesde/roblox/lifecycles/logger.luau | 5 - dist/pesde/roblox/lifecycles/pesde.toml | 38 -- dist/pesde/roblox/lifecycles/runtime.luau | 3 - dist/pesde/roblox/lifecycles/src/create.luau | 45 -- .../src/handlers/fire-concurrent.luau | 10 - .../src/hooks/lifecycle-constructed.luau | 15 - .../src/hooks/lifecycle-unregistered.luau | 20 - dist/pesde/roblox/lifecycles/src/index.d.ts | 45 -- dist/pesde/roblox/lifecycles/src/init.luau | 28 -- dist/pesde/roblox/lifecycles/src/logger.luau | 6 - .../lifecycles/src/method-to-lifecycles.luau | 5 - .../roblox/lifecycles/src/methods/await.luau | 17 - .../lifecycles/src/methods/destroy.luau | 18 - .../lifecycles/src/methods/on-registered.luau | 17 - .../src/methods/on-unregistered.luau | 17 - .../lifecycles/src/methods/unregister.luau | 18 - dist/pesde/roblox/lifecycles/src/types.luau | 23 - .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/logger/LICENSE.md | 355 --------------- dist/pesde/roblox/logger/pesde.toml | 35 -- dist/pesde/roblox/logger/runtime.luau | 3 - .../roblox/logger/src/allow-web-links.luau | 5 - dist/pesde/roblox/logger/src/create.luau | 32 -- dist/pesde/roblox/logger/src/format-log.luau | 43 -- dist/pesde/roblox/logger/src/index.d.ts | 45 -- dist/pesde/roblox/logger/src/init.luau | 18 - dist/pesde/roblox/logger/src/parse-error.luau | 12 - .../logger/src/standard-error-info-url.luau | 5 - dist/pesde/roblox/logger/src/types.luau | 23 - .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/providers/LICENSE.md | 355 --------------- dist/pesde/roblox/providers/dependencies.luau | 3 - dist/pesde/roblox/providers/lifecycles.luau | 3 - dist/pesde/roblox/providers/logger.luau | 5 - dist/pesde/roblox/providers/pesde.toml | 44 -- dist/pesde/roblox/providers/runtime.luau | 3 - dist/pesde/roblox/providers/src/create.luau | 30 -- dist/pesde/roblox/providers/src/index.d.ts | 36 -- dist/pesde/roblox/providers/src/init.luau | 16 - dist/pesde/roblox/providers/src/name-of.luau | 7 - .../providers/src/provider-classes.luau | 7 - dist/pesde/roblox/providers/src/types.luau | 12 - .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/prvdmwrong/LICENSE.md | 355 --------------- .../pesde/roblox/prvdmwrong/dependencies.luau | 3 - dist/pesde/roblox/prvdmwrong/lifecycles.luau | 3 - dist/pesde/roblox/prvdmwrong/pesde.toml | 44 -- dist/pesde/roblox/prvdmwrong/providers.luau | 3 - dist/pesde/roblox/prvdmwrong/roots.luau | 4 - dist/pesde/roblox/prvdmwrong/src/index.d.ts | 42 -- dist/pesde/roblox/prvdmwrong/src/init.luau | 45 -- .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/rbx-components/LICENSE.md | 355 --------------- .../roblox/rbx-components/dependencies.luau | 3 - dist/pesde/roblox/rbx-components/logger.luau | 5 - dist/pesde/roblox/rbx-components/pesde.toml | 44 -- .../roblox/rbx-components/providers.luau | 3 - dist/pesde/roblox/rbx-components/roots.luau | 4 - .../rbx-components/src/component-classes.luau | 7 - .../roblox/rbx-components/src/create.luau | 28 -- .../create-component-class-provider.luau | 31 -- .../rbx-components/src/extend-root/init.luau | 30 -- .../src/extend-root/use-component.luau | 8 - .../src/extend-root/use-components.luau | 10 - .../extend-root/use-module-as-component.luau | 12 - .../use-modules-as-components.luau | 28 -- .../pesde/roblox/rbx-components/src/init.luau | 24 - .../roblox/rbx-components/src/logger.luau | 8 - .../roblox/rbx-components/src/types.luau | 30 -- .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/rbx-lifecycles/LICENSE.md | 355 --------------- dist/pesde/roblox/rbx-lifecycles/pesde.toml | 35 -- .../roblox/rbx-lifecycles/prvdmwrong.luau | 6 - .../roblox/rbx-lifecycles/src/index.d.ts | 40 -- .../pesde/roblox/rbx-lifecycles/src/init.luau | 67 --- .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/roots/LICENSE.md | 355 --------------- dist/pesde/roblox/roots/dependencies.luau | 3 - dist/pesde/roblox/roots/lifecycles.luau | 3 - dist/pesde/roblox/roots/logger.luau | 5 - dist/pesde/roblox/roots/pesde.toml | 47 -- dist/pesde/roblox/roots/providers.luau | 3 - dist/pesde/roblox/roots/runtime.luau | 3 - dist/pesde/roblox/roots/src/create.luau | 47 -- .../roots/src/hooks/lifecycle-used.luau | 16 - .../roblox/roots/src/hooks/provider-used.luau | 16 - .../roots/src/hooks/root-constructing.luau | 15 - .../roblox/roots/src/hooks/root-finished.luau | 15 - .../roblox/roots/src/hooks/root-used.luau | 15 - dist/pesde/roblox/roots/src/index.d.ts | 45 -- dist/pesde/roblox/roots/src/init.luau | 28 -- dist/pesde/roblox/roots/src/logger.luau | 7 - .../pesde/roblox/roots/src/methods/start.luau | 102 ----- .../roots/src/methods/use-lifecycle.luau | 14 - .../roblox/roots/src/methods/use-module.luau | 23 - .../roblox/roots/src/methods/use-modules.luau | 28 -- .../roots/src/methods/use-provider.luau | 14 - .../roblox/roots/src/methods/use-root.luau | 13 - .../roblox/roots/src/methods/use-roots.luau | 15 - dist/pesde/roblox/roots/src/types.luau | 40 -- .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/runtime/LICENSE.md | 355 --------------- dist/pesde/roblox/runtime/pesde.toml | 30 -- .../runtime/src/batteries/threadpool.luau | 38 -- .../runtime/src/implementations/init.luau | 56 --- .../src/implementations/init.spec.luau | 81 ---- .../runtime/src/implementations/luau.luau | 9 - .../runtime/src/implementations/lune.luau | 10 - .../runtime/src/implementations/lute.luau | 8 - .../runtime/src/implementations/roblox.luau | 9 - .../runtime/src/implementations/seal.luau | 8 - .../runtime/src/implementations/zune.luau | 10 - dist/pesde/roblox/runtime/src/index.d.ts | 47 -- dist/pesde/roblox/runtime/src/init.luau | 15 - dist/pesde/roblox/runtime/src/libs/task.luau | 157 ------- .../roblox/runtime/src/libs/task.spec.luau | 62 --- dist/pesde/roblox/runtime/src/libs/warn.luau | 27 -- dist/pesde/roblox/runtime/src/types.luau | 13 - .../scripts/roblox_sync_config_generator.luau | 1 - .../.pesde/scripts/sourcemap-generator.luau | 1 - dist/pesde/roblox/typecheckers/LICENSE.md | 355 --------------- dist/pesde/roblox/typecheckers/pesde.toml | 30 -- dist/pesde/roblox/typecheckers/src/init.luau | 0 dist/wally/dependencies/LICENSE.md | 355 --------------- dist/wally/dependencies/Wally.toml | 15 - dist/wally/dependencies/lifecycles.luau | 3 - dist/wally/dependencies/logger.luau | 5 - dist/wally/dependencies/src/depend.luau | 30 -- dist/wally/dependencies/src/index.d.ts | 25 -- dist/wally/dependencies/src/init.luau | 12 - dist/wally/dependencies/src/logger.luau | 7 - .../src/process-dependencies.luau | 57 --- .../src/process-dependencies.spec.luau | 67 --- .../dependencies/src/sort-by-priority.luau | 14 - .../src/sort-by-priority.spec.luau | 52 --- dist/wally/dependencies/src/types.luau | 14 - dist/wally/lifecycles/LICENSE.md | 355 --------------- dist/wally/lifecycles/Wally.toml | 15 - dist/wally/lifecycles/logger.luau | 5 - dist/wally/lifecycles/runtime.luau | 3 - dist/wally/lifecycles/src/create.luau | 45 -- .../src/handlers/fire-concurrent.luau | 10 - .../src/handlers/fire-sequential.luau | 9 - .../src/hooks/lifecycle-constructed.luau | 15 - .../src/hooks/lifecycle-destroyed.luau | 15 - .../src/hooks/lifecycle-registered.luau | 20 - .../src/hooks/lifecycle-unregistered.luau | 20 - dist/wally/lifecycles/src/index.d.ts | 45 -- dist/wally/lifecycles/src/init.luau | 28 -- dist/wally/lifecycles/src/logger.luau | 6 - .../lifecycles/src/method-to-lifecycles.luau | 5 - dist/wally/lifecycles/src/methods/await.luau | 17 - .../wally/lifecycles/src/methods/destroy.luau | 18 - .../lifecycles/src/methods/on-registered.luau | 17 - .../src/methods/on-unregistered.luau | 17 - .../lifecycles/src/methods/register.luau | 18 - .../src/methods/unregister-all.luau | 17 - .../lifecycles/src/methods/unregister.luau | 18 - dist/wally/lifecycles/src/types.luau | 23 - dist/wally/logger/LICENSE.md | 355 --------------- dist/wally/logger/Wally.toml | 14 - dist/wally/logger/runtime.luau | 3 - dist/wally/logger/src/allow-web-links.luau | 5 - dist/wally/logger/src/create.luau | 32 -- dist/wally/logger/src/format-log.luau | 43 -- dist/wally/logger/src/index.d.ts | 45 -- dist/wally/logger/src/init.luau | 18 - dist/wally/logger/src/parse-error.luau | 12 - .../logger/src/standard-error-info-url.luau | 5 - dist/wally/logger/src/types.luau | 23 - dist/wally/providers/LICENSE.md | 355 --------------- dist/wally/providers/Wally.toml | 17 - dist/wally/providers/dependencies.luau | 3 - dist/wally/providers/lifecycles.luau | 3 - dist/wally/providers/logger.luau | 5 - dist/wally/providers/runtime.luau | 3 - dist/wally/providers/src/create.luau | 30 -- dist/wally/providers/src/index.d.ts | 36 -- dist/wally/providers/src/init.luau | 16 - dist/wally/providers/src/name-of.luau | 7 - .../wally/providers/src/provider-classes.luau | 7 - dist/wally/providers/src/types.luau | 12 - dist/wally/prvdmwrong/LICENSE.md | 355 --------------- dist/wally/prvdmwrong/Wally.toml | 17 - dist/wally/prvdmwrong/dependencies.luau | 3 - dist/wally/prvdmwrong/lifecycles.luau | 3 - dist/wally/prvdmwrong/providers.luau | 3 - dist/wally/prvdmwrong/roots.luau | 4 - dist/wally/prvdmwrong/src/index.d.ts | 42 -- dist/wally/prvdmwrong/src/init.luau | 45 -- dist/wally/rbx-components/LICENSE.md | 355 --------------- dist/wally/rbx-components/Wally.toml | 17 - dist/wally/rbx-components/dependencies.luau | 3 - dist/wally/rbx-components/logger.luau | 5 - dist/wally/rbx-components/providers.luau | 3 - dist/wally/rbx-components/roots.luau | 4 - .../rbx-components/src/component-classes.luau | 7 - .../src/component-provider.luau | 185 -------- dist/wally/rbx-components/src/create.luau | 28 -- .../create-component-class-provider.luau | 31 -- .../rbx-components/src/extend-root/init.luau | 30 -- .../src/extend-root/use-component.luau | 8 - .../src/extend-root/use-components.luau | 10 - .../extend-root/use-module-as-component.luau | 12 - .../use-modules-as-components.luau | 28 -- dist/wally/rbx-components/src/init.luau | 24 - dist/wally/rbx-components/src/logger.luau | 8 - dist/wally/rbx-components/src/types.luau | 30 -- dist/wally/rbx-lifecycles/LICENSE.md | 355 --------------- dist/wally/rbx-lifecycles/Wally.toml | 14 - dist/wally/rbx-lifecycles/prvdmwrong.luau | 6 - dist/wally/rbx-lifecycles/src/index.d.ts | 40 -- dist/wally/rbx-lifecycles/src/init.luau | 67 --- dist/wally/roots/LICENSE.md | 355 --------------- dist/wally/roots/Wally.toml | 18 - dist/wally/roots/dependencies.luau | 3 - dist/wally/roots/lifecycles.luau | 3 - dist/wally/roots/logger.luau | 5 - dist/wally/roots/providers.luau | 3 - dist/wally/roots/runtime.luau | 3 - dist/wally/roots/src/create.luau | 47 -- .../wally/roots/src/hooks/lifecycle-used.luau | 16 - dist/wally/roots/src/hooks/provider-used.luau | 16 - .../roots/src/hooks/root-constructing.luau | 15 - .../wally/roots/src/hooks/root-destroyed.luau | 15 - dist/wally/roots/src/hooks/root-finished.luau | 15 - dist/wally/roots/src/hooks/root-started.luau | 15 - dist/wally/roots/src/hooks/root-used.luau | 15 - dist/wally/roots/src/index.d.ts | 45 -- dist/wally/roots/src/init.luau | 28 -- dist/wally/roots/src/logger.luau | 7 - dist/wally/roots/src/methods/destroy.luau | 16 - dist/wally/roots/src/methods/start.luau | 102 ----- .../roots/src/methods/use-lifecycle.luau | 14 - .../roots/src/methods/use-lifecycles.luau | 16 - dist/wally/roots/src/methods/use-module.luau | 23 - dist/wally/roots/src/methods/use-modules.luau | 28 -- .../wally/roots/src/methods/use-provider.luau | 14 - .../roots/src/methods/use-providers.luau | 16 - dist/wally/roots/src/methods/use-root.luau | 13 - dist/wally/roots/src/methods/use-roots.luau | 15 - dist/wally/roots/src/methods/will-finish.luau | 8 - dist/wally/roots/src/methods/will-start.luau | 8 - dist/wally/roots/src/types.luau | 40 -- dist/wally/runtime/LICENSE.md | 355 --------------- dist/wally/runtime/Wally.toml | 13 - .../runtime/src/batteries/threadpool.luau | 38 -- .../runtime/src/implementations/init.luau | 56 --- .../src/implementations/init.spec.luau | 81 ---- .../runtime/src/implementations/luau.luau | 9 - .../runtime/src/implementations/lune.luau | 10 - .../runtime/src/implementations/lute.luau | 8 - .../runtime/src/implementations/roblox.luau | 9 - .../runtime/src/implementations/seal.luau | 8 - .../runtime/src/implementations/zune.luau | 10 - dist/wally/runtime/src/index.d.ts | 47 -- dist/wally/runtime/src/init.luau | 15 - dist/wally/runtime/src/libs/task.luau | 157 ------- dist/wally/runtime/src/libs/task.spec.luau | 62 --- dist/wally/runtime/src/libs/warn.luau | 27 -- dist/wally/runtime/src/types.luau | 13 - dist/wally/typecheckers/LICENSE.md | 355 --------------- dist/wally/typecheckers/Wally.toml | 13 - dist/wally/typecheckers/src/init.luau | 0 gh-assets/wordmark-dark.svg | 18 - gh-assets/wordmark-light.svg | 18 - .../lifecycles/src => lifecycles}/create.luau | 20 +- .../handlers/fire-concurrent.luau | 4 +- .../handlers/fire-sequential.luau | 2 +- .../hooks/lifecycle-constructed.luau | 10 +- .../hooks/lifecycle-destroyed.luau | 10 +- .../hooks/lifecycle-registered.luau | 10 +- .../hooks/lifecycle-unregistered.luau | 10 +- lifecycles/init.luau | 28 ++ .../lifecycles/src => lifecycles}/logger.luau | 4 +- .../method-to-lifecycles.luau | 2 +- .../src => lifecycles}/methods/await.luau | 8 +- .../src => lifecycles}/methods/destroy.luau | 12 +- .../methods/on-registered.luau | 12 +- .../methods/on-unregistered.luau | 12 +- .../src => lifecycles}/methods/register.luau | 10 +- .../methods/unregister-all.luau | 10 +- .../methods/unregister.luau | 10 +- .../lifecycles/src => lifecycles}/types.luau | 0 .../src => logger}/allow-web-links.luau | 2 +- logger/create.luau | 26 ++ .../logger/src => logger}/format-log.luau | 2 +- logger/init.luau | 18 + .../logger/src => logger}/parse-error.luau | 2 +- .../standard-error-info-url.luau | 0 {dist/npm/logger/src => logger}/types.luau | 0 lune/run-example.luau | 0 lune/tiniest.luau | 0 package.json | 25 -- packages/dependencies/depend.luau | 30 -- packages/dependencies/index.d.ts | 25 -- packages/dependencies/init.luau | 12 - packages/dependencies/logger.luau | 7 - .../dependencies/process-dependencies.luau | 57 --- .../process-dependencies.spec.luau | 67 --- packages/dependencies/prvd.config.luau | 15 - packages/dependencies/sort-by-priority.luau | 14 - .../dependencies/sort-by-priority.spec.luau | 52 --- packages/dependencies/types.luau | 14 - packages/lifecycles/create.luau | 45 -- .../lifecycles/handlers/fire-concurrent.luau | 10 - .../lifecycles/handlers/fire-sequential.luau | 9 - .../hooks/lifecycle-constructed.luau | 15 - .../lifecycles/hooks/lifecycle-destroyed.luau | 15 - .../hooks/lifecycle-registered.luau | 20 - .../hooks/lifecycle-unregistered.luau | 20 - packages/lifecycles/index.d.ts | 45 -- packages/lifecycles/init.luau | 28 -- packages/lifecycles/logger.luau | 6 - packages/lifecycles/method-to-lifecycles.luau | 5 - packages/lifecycles/methods/await.luau | 17 - packages/lifecycles/methods/destroy.luau | 18 - .../lifecycles/methods/on-registered.luau | 17 - .../lifecycles/methods/on-unregistered.luau | 17 - packages/lifecycles/methods/register.luau | 18 - .../lifecycles/methods/unregister-all.luau | 17 - packages/lifecycles/methods/unregister.luau | 18 - packages/lifecycles/prvd.config.luau | 15 - packages/lifecycles/types.luau | 23 - packages/logger/allow-web-links.luau | 5 - packages/logger/create.luau | 32 -- packages/logger/format-log.luau | 43 -- packages/logger/index.d.ts | 45 -- packages/logger/init.luau | 18 - packages/logger/parse-error.luau | 12 - packages/logger/prvd.config.luau | 16 - packages/logger/standard-error-info-url.luau | 5 - packages/logger/types.luau | 23 - packages/providers/README.md | 0 packages/providers/create.luau | 30 -- packages/providers/index.d.ts | 36 -- packages/providers/init.luau | 16 - packages/providers/name-of.luau | 7 - packages/providers/provider-classes.luau | 7 - packages/providers/prvd.config.luau | 17 - packages/providers/types.luau | 12 - packages/prvdmwrong/index.d.ts | 42 -- packages/prvdmwrong/init.luau | 45 -- packages/prvdmwrong/prvd.config.luau | 20 - .../rbx-components/component-classes.luau | 7 - .../rbx-components/component-provider.luau | 185 -------- packages/rbx-components/create.luau | 28 -- .../create-component-class-provider.luau | 31 -- packages/rbx-components/extend-root/init.luau | 30 -- .../extend-root/use-component.luau | 8 - .../extend-root/use-components.luau | 10 - .../extend-root/use-module-as-component.luau | 12 - .../use-modules-as-components.luau | 28 -- packages/rbx-components/init.luau | 24 - packages/rbx-components/logger.luau | 8 - packages/rbx-components/prvd.config.luau | 15 - packages/rbx-components/types.luau | 30 -- packages/rbx-lifecycles/index.d.ts | 40 -- packages/rbx-lifecycles/init.luau | 67 --- packages/rbx-lifecycles/prvd.config.luau | 14 - packages/roots/create.luau | 47 -- packages/roots/hooks/lifecycle-used.luau | 16 - packages/roots/hooks/provider-used.luau | 16 - packages/roots/hooks/root-constructing.luau | 15 - packages/roots/hooks/root-destroyed.luau | 15 - packages/roots/hooks/root-finished.luau | 15 - packages/roots/hooks/root-started.luau | 15 - packages/roots/hooks/root-used.luau | 15 - packages/roots/index.d.ts | 45 -- packages/roots/init.luau | 28 -- packages/roots/logger.luau | 7 - packages/roots/methods/destroy.luau | 16 - packages/roots/methods/start.luau | 102 ----- packages/roots/methods/use-lifecycle.luau | 14 - packages/roots/methods/use-lifecycles.luau | 16 - packages/roots/methods/use-module.luau | 23 - packages/roots/methods/use-modules.luau | 28 -- packages/roots/methods/use-provider.luau | 14 - packages/roots/methods/use-providers.luau | 16 - packages/roots/methods/use-root.luau | 13 - packages/roots/methods/use-roots.luau | 15 - packages/roots/methods/will-finish.luau | 8 - packages/roots/methods/will-start.luau | 8 - packages/roots/prvd.config.luau | 19 - packages/roots/types.luau | 40 -- packages/runtime/batteries/threadpool.luau | 38 -- packages/runtime/implementations/init.luau | 56 --- .../runtime/implementations/init.spec.luau | 81 ---- packages/runtime/implementations/luau.luau | 9 - packages/runtime/implementations/lune.luau | 10 - packages/runtime/implementations/lute.luau | 8 - packages/runtime/implementations/roblox.luau | 9 - packages/runtime/implementations/seal.luau | 8 - packages/runtime/implementations/zune.luau | 10 - packages/runtime/index.d.ts | 47 -- packages/runtime/init.luau | 15 - packages/runtime/libs/task.luau | 157 ------- packages/runtime/libs/task.spec.luau | 62 --- packages/runtime/libs/warn.luau | 27 -- packages/runtime/prvd.config.luau | 10 - packages/runtime/types.luau | 13 - packages/typecheckers/init.luau | 0 packages/typecheckers/prvd.config.luau | 6 - pesde.toml | 8 - providers/create.luau | 27 ++ providers/init.luau | 16 + providers/name-of.luau | 5 + .../src => providers}/provider-classes.luau | 2 +- .../providers/src => providers}/types.luau | 6 +- prvd.config.luau | 17 - .../prvdmwrong/src => prvdmwrong}/init.luau | 18 +- .../component-classes.luau | 2 +- .../component-provider.luau | 52 +-- .../src => rbx-components}/create.luau | 12 +- .../create-component-class-provider.luau | 10 +- rbx-components/extend-root/init.luau | 28 ++ .../extend-root/use-component.luau | 2 +- .../extend-root/use-components.luau | 2 +- .../extend-root/use-module-as-component.luau | 8 +- .../use-modules-as-components.luau | 22 + .../src => rbx-components}/init.luau | 16 +- .../src => rbx-components}/logger.luau | 4 +- .../src => rbx-components}/types.luau | 4 +- rbx-lifecycles/init.luau | 81 ++++ rokit.toml | 13 - roots/create.luau | 48 ++ .../src => roots}/hooks/lifecycle-used.luau | 12 +- .../src => roots}/hooks/provider-used.luau | 12 +- .../hooks/root-constructing.luau | 10 +- .../src => roots}/hooks/root-destroyed.luau | 10 +- .../src => roots}/hooks/root-finished.luau | 10 +- .../src => roots}/hooks/root-started.luau | 10 +- .../roots/src => roots}/hooks/root-used.luau | 10 +- roots/init.luau | 28 ++ .../lune/roots/src => roots}/logger.luau | 4 +- .../roots/src => roots}/methods/destroy.luau | 8 +- .../roots/src => roots}/methods/start.luau | 48 +- .../src => roots}/methods/use-lifecycle.luau | 6 +- .../src => roots}/methods/use-lifecycles.luau | 6 +- .../src => roots}/methods/use-module.luau | 10 +- .../src => roots}/methods/use-modules.luau | 14 +- .../src => roots}/methods/use-provider.luau | 6 +- .../src => roots}/methods/use-providers.luau | 6 +- .../roots/src => roots}/methods/use-root.luau | 4 +- .../src => roots}/methods/use-roots.luau | 4 +- .../src => roots}/methods/will-finish.luau | 2 +- .../src => roots}/methods/will-start.luau | 2 +- .../pesde/lune/roots/src => roots}/types.luau | 8 +- runtime/init.luau | 16 + .../src/batteries => runtime}/threadpool.luau | 12 +- {dist/npm/runtime/src => runtime}/types.luau | 8 +- sitegen/README.md | 12 - sitegen/build.luau | 26 -- sitegen/components/article.luau | 74 --- sitegen/components/button.luau | 15 - sitegen/components/code-snippet.luau | 19 - sitegen/components/document.luau | 47 -- sitegen/components/navbar.luau | 28 -- sitegen/config/common-urls.luau | 3 - sitegen/config/nav-pages.luau | 30 -- sitegen/config/site-urls.luau | 6 - sitegen/config/sitemap.luau | 15 - sitegen/h.luau | 133 ------ sitegen/init.luau | 65 --- sitegen/pages/api/index.luau | 0 sitegen/pages/index.luau | 97 ---- .../pages/learn/fundamentals/lifecycles.luau | 0 .../pages/learn/fundamentals/providers.luau | 0 sitegen/pages/learn/fundamentals/roots.luau | 0 .../fundamentals/using-dependencies.luau | 0 sitegen/pages/learn/index.luau | 61 --- sitegen/pages/learn/installation.luau | 33 -- sitegen/pages/learn/roblox/components.luau | 0 .../pages/learn/roblox/roblox-lifecycles.luau | 0 sitegen/publish.luau | 0 sitegen/static/fonts/jura.ttf | Bin 259928 -> 0 bytes sitegen/static/stylesheets/article.css | 18 - sitegen/static/stylesheets/common.css | 136 ------ sitegen/static/stylesheets/fonts.css | 63 --- sitegen/static/stylesheets/landing.css | 65 --- sitegen/static/stylesheets/reset.css | 47 -- sitegen/utils/for-each.luau | 14 - sitegen/utils/site-base-url.luau | 7 - stylua.toml | 4 - tsconfig.json | 27 -- {.lune/lib/publish => typecheckers}/init.luau | 0 types/g.d.luau | 5 - 869 files changed, 601 insertions(+), 35745 deletions(-) create mode 100644 .config.luau delete mode 100644 .luaurc delete mode 100644 .lune/build.luau delete mode 100644 .lune/lib/configure.luau delete mode 100644 .lune/lib/root-config.luau delete mode 100644 .lune/lib/tiniest/tiniest.luau delete mode 100644 .lune/lib/tiniest/tiniest_expect.luau delete mode 100644 .lune/lib/tiniest/tiniest_for_lune.luau delete mode 100644 .lune/lib/tiniest/tiniest_plugin.luau delete mode 100644 .lune/lib/tiniest/tiniest_pretty.luau delete mode 100644 .lune/lib/tiniest/tiniest_quote.luau delete mode 100644 .lune/lib/tiniest/tiniest_snapshot.luau delete mode 100644 .lune/lib/tiniest/tiniest_time.luau delete mode 100644 .lune/lib/types.luau delete mode 100644 .lune/lib/utils/collect-packages.luau delete mode 100644 .lune/lib/utils/path.luau delete mode 100644 .lune/lib/utils/print-divider.luau delete mode 100644 .lune/lib/utils/select-packages.luau delete mode 100644 .lune/lib/utils/styles.luau delete mode 100644 .lune/pesde-scripts/roblox_sync_config_generator.luau delete mode 100644 .lune/pesde-scripts/sourcemap-generator.luau delete mode 100644 .lune/publish.luau delete mode 100644 .lune/tiniest.luau delete mode 100644 .zed/settings.json delete mode 100644 LICENSE.md delete mode 100644 README.md rename {dist/pesde/luau/dependencies/src => dependencies}/depend.luau (72%) create mode 100644 dependencies/init.luau rename {dist/pesde/luau/dependencies/src => dependencies}/logger.luau (81%) rename {dist/npm/dependencies/src => dependencies}/process-dependencies.luau (95%) rename {dist/pesde/luau/dependencies/src => dependencies}/sort-by-priority.luau (69%) rename {dist/npm/dependencies/src => dependencies}/types.luau (100%) delete mode 100644 dist/bundle.rbxl delete mode 100644 dist/bundle.rbxm delete mode 100644 dist/models/dependencies.rbxm delete mode 100644 dist/models/lifecycles.rbxm delete mode 100644 dist/models/logger.rbxm delete mode 100644 dist/models/providers.rbxm delete mode 100644 dist/models/prvdmwrong.rbxm delete mode 100644 dist/models/rbx-components.rbxm delete mode 100644 dist/models/rbx-lifecycles.rbxm delete mode 100644 dist/models/roots.rbxm delete mode 100644 dist/models/runtime.rbxm delete mode 100644 dist/models/typecheckers.rbxm delete mode 100644 dist/npm/dependencies/LICENSE.md delete mode 100644 dist/npm/dependencies/lifecycles.luau delete mode 100644 dist/npm/dependencies/logger.luau delete mode 100644 dist/npm/dependencies/package.json delete mode 100644 dist/npm/dependencies/src/depend.luau delete mode 100644 dist/npm/dependencies/src/index.d.ts delete mode 100644 dist/npm/dependencies/src/init.luau delete mode 100644 dist/npm/dependencies/src/logger.luau delete mode 100644 dist/npm/dependencies/src/process-dependencies.spec.luau delete mode 100644 dist/npm/dependencies/src/sort-by-priority.luau delete mode 100644 dist/npm/dependencies/src/sort-by-priority.spec.luau delete mode 100644 dist/npm/lifecycles/LICENSE.md delete mode 100644 dist/npm/lifecycles/logger.luau delete mode 100644 dist/npm/lifecycles/package.json delete mode 100644 dist/npm/lifecycles/runtime.luau delete mode 100644 dist/npm/lifecycles/src/create.luau delete mode 100644 dist/npm/lifecycles/src/index.d.ts delete mode 100644 dist/npm/lifecycles/src/init.luau delete mode 100644 dist/npm/lifecycles/src/method-to-lifecycles.luau delete mode 100644 dist/npm/logger/LICENSE.md delete mode 100644 dist/npm/logger/package.json delete mode 100644 dist/npm/logger/runtime.luau delete mode 100644 dist/npm/logger/src/allow-web-links.luau delete mode 100644 dist/npm/logger/src/create.luau delete mode 100644 dist/npm/logger/src/format-log.luau delete mode 100644 dist/npm/logger/src/index.d.ts delete mode 100644 dist/npm/logger/src/init.luau delete mode 100644 dist/npm/logger/src/parse-error.luau delete mode 100644 dist/npm/providers/LICENSE.md delete mode 100644 dist/npm/providers/dependencies.luau delete mode 100644 dist/npm/providers/lifecycles.luau delete mode 100644 dist/npm/providers/logger.luau delete mode 100644 dist/npm/providers/package.json delete mode 100644 dist/npm/providers/runtime.luau delete mode 100644 dist/npm/providers/src/create.luau delete mode 100644 dist/npm/providers/src/index.d.ts delete mode 100644 dist/npm/providers/src/init.luau delete mode 100644 dist/npm/providers/src/name-of.luau delete mode 100644 dist/npm/prvdmwrong/LICENSE.md delete mode 100644 dist/npm/prvdmwrong/dependencies.luau delete mode 100644 dist/npm/prvdmwrong/lifecycles.luau delete mode 100644 dist/npm/prvdmwrong/package.json delete mode 100644 dist/npm/prvdmwrong/providers.luau delete mode 100644 dist/npm/prvdmwrong/roots.luau delete mode 100644 dist/npm/prvdmwrong/src/index.d.ts delete mode 100644 dist/npm/prvdmwrong/src/init.luau delete mode 100644 dist/npm/rbx-components/LICENSE.md delete mode 100644 dist/npm/rbx-components/dependencies.luau delete mode 100644 dist/npm/rbx-components/logger.luau delete mode 100644 dist/npm/rbx-components/package.json delete mode 100644 dist/npm/rbx-components/providers.luau delete mode 100644 dist/npm/rbx-components/roots.luau delete mode 100644 dist/npm/rbx-components/src/component-classes.luau delete mode 100644 dist/npm/rbx-components/src/component-provider.luau delete mode 100644 dist/npm/rbx-components/src/create.luau delete mode 100644 dist/npm/rbx-components/src/logger.luau delete mode 100644 dist/npm/rbx-components/src/types.luau delete mode 100644 dist/npm/rbx-lifecycles/LICENSE.md delete mode 100644 dist/npm/rbx-lifecycles/package.json delete mode 100644 dist/npm/rbx-lifecycles/prvdmwrong.luau delete mode 100644 dist/npm/rbx-lifecycles/src/index.d.ts delete mode 100644 dist/npm/rbx-lifecycles/src/init.luau delete mode 100644 dist/npm/roots/LICENSE.md delete mode 100644 dist/npm/roots/dependencies.luau delete mode 100644 dist/npm/roots/lifecycles.luau delete mode 100644 dist/npm/roots/logger.luau delete mode 100644 dist/npm/roots/package.json delete mode 100644 dist/npm/roots/providers.luau delete mode 100644 dist/npm/roots/runtime.luau delete mode 100644 dist/npm/roots/src/create.luau delete mode 100644 dist/npm/roots/src/index.d.ts delete mode 100644 dist/npm/roots/src/init.luau delete mode 100644 dist/npm/roots/src/logger.luau delete mode 100644 dist/npm/roots/src/types.luau delete mode 100644 dist/npm/runtime/LICENSE.md delete mode 100644 dist/npm/runtime/package.json delete mode 100644 dist/npm/runtime/src/index.d.ts delete mode 100644 dist/npm/runtime/src/init.luau delete mode 100644 dist/npm/typecheckers/LICENSE.md delete mode 100644 dist/npm/typecheckers/package.json delete mode 100644 dist/npm/typecheckers/src/init.luau delete mode 100644 dist/pesde/luau/dependencies/LICENSE.md delete mode 100644 dist/pesde/luau/dependencies/lifecycles.luau delete mode 100644 dist/pesde/luau/dependencies/logger.luau delete mode 100644 dist/pesde/luau/dependencies/pesde.toml delete mode 100644 dist/pesde/luau/dependencies/src/index.d.ts delete mode 100644 dist/pesde/luau/dependencies/src/init.luau delete mode 100644 dist/pesde/luau/dependencies/src/process-dependencies.luau delete mode 100644 dist/pesde/luau/dependencies/src/process-dependencies.spec.luau delete mode 100644 dist/pesde/luau/dependencies/src/sort-by-priority.spec.luau delete mode 100644 dist/pesde/luau/dependencies/src/types.luau delete mode 100644 dist/pesde/luau/lifecycles/LICENSE.md delete mode 100644 dist/pesde/luau/lifecycles/logger.luau delete mode 100644 dist/pesde/luau/lifecycles/pesde.toml delete mode 100644 dist/pesde/luau/lifecycles/runtime.luau delete mode 100644 dist/pesde/luau/lifecycles/src/create.luau delete mode 100644 dist/pesde/luau/lifecycles/src/handlers/fire-sequential.luau delete mode 100644 dist/pesde/luau/lifecycles/src/hooks/lifecycle-destroyed.luau delete mode 100644 dist/pesde/luau/lifecycles/src/hooks/lifecycle-registered.luau delete mode 100644 dist/pesde/luau/lifecycles/src/hooks/lifecycle-unregistered.luau delete mode 100644 dist/pesde/luau/lifecycles/src/index.d.ts delete mode 100644 dist/pesde/luau/lifecycles/src/init.luau delete mode 100644 dist/pesde/luau/lifecycles/src/logger.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/on-unregistered.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/register.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/unregister-all.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/unregister.luau delete mode 100644 dist/pesde/luau/lifecycles/src/types.luau delete mode 100644 dist/pesde/luau/logger/LICENSE.md delete mode 100644 dist/pesde/luau/logger/pesde.toml delete mode 100644 dist/pesde/luau/logger/runtime.luau delete mode 100644 dist/pesde/luau/logger/src/create.luau delete mode 100644 dist/pesde/luau/logger/src/format-log.luau delete mode 100644 dist/pesde/luau/logger/src/index.d.ts delete mode 100644 dist/pesde/luau/logger/src/init.luau delete mode 100644 dist/pesde/luau/logger/src/standard-error-info-url.luau delete mode 100644 dist/pesde/luau/logger/src/types.luau delete mode 100644 dist/pesde/luau/providers/LICENSE.md delete mode 100644 dist/pesde/luau/providers/dependencies.luau delete mode 100644 dist/pesde/luau/providers/lifecycles.luau delete mode 100644 dist/pesde/luau/providers/logger.luau delete mode 100644 dist/pesde/luau/providers/pesde.toml delete mode 100644 dist/pesde/luau/providers/runtime.luau delete mode 100644 dist/pesde/luau/providers/src/create.luau delete mode 100644 dist/pesde/luau/providers/src/index.d.ts delete mode 100644 dist/pesde/luau/providers/src/init.luau delete mode 100644 dist/pesde/luau/providers/src/name-of.luau delete mode 100644 dist/pesde/luau/providers/src/provider-classes.luau delete mode 100644 dist/pesde/luau/providers/src/types.luau delete mode 100644 dist/pesde/luau/prvdmwrong/LICENSE.md delete mode 100644 dist/pesde/luau/prvdmwrong/dependencies.luau delete mode 100644 dist/pesde/luau/prvdmwrong/lifecycles.luau delete mode 100644 dist/pesde/luau/prvdmwrong/pesde.toml delete mode 100644 dist/pesde/luau/prvdmwrong/providers.luau delete mode 100644 dist/pesde/luau/prvdmwrong/roots.luau delete mode 100644 dist/pesde/luau/prvdmwrong/src/index.d.ts delete mode 100644 dist/pesde/luau/prvdmwrong/src/init.luau delete mode 100644 dist/pesde/luau/rbx-components/LICENSE.md delete mode 100644 dist/pesde/luau/rbx-components/dependencies.luau delete mode 100644 dist/pesde/luau/rbx-components/logger.luau delete mode 100644 dist/pesde/luau/rbx-components/pesde.toml delete mode 100644 dist/pesde/luau/rbx-components/providers.luau delete mode 100644 dist/pesde/luau/rbx-components/roots.luau delete mode 100644 dist/pesde/luau/rbx-components/src/component-classes.luau delete mode 100644 dist/pesde/luau/rbx-components/src/component-provider.luau delete mode 100644 dist/pesde/luau/rbx-components/src/create.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/create-component-class-provider.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/init.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/use-component.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/use-components.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/use-module-as-component.luau delete mode 100644 dist/pesde/luau/rbx-components/src/extend-root/use-modules-as-components.luau delete mode 100644 dist/pesde/luau/rbx-components/src/init.luau delete mode 100644 dist/pesde/luau/rbx-components/src/logger.luau delete mode 100644 dist/pesde/luau/roots/LICENSE.md delete mode 100644 dist/pesde/luau/roots/dependencies.luau delete mode 100644 dist/pesde/luau/roots/lifecycles.luau delete mode 100644 dist/pesde/luau/roots/logger.luau delete mode 100644 dist/pesde/luau/roots/pesde.toml delete mode 100644 dist/pesde/luau/roots/providers.luau delete mode 100644 dist/pesde/luau/roots/runtime.luau delete mode 100644 dist/pesde/luau/roots/src/create.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/lifecycle-used.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/provider-used.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/root-constructing.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/root-destroyed.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/root-started.luau delete mode 100644 dist/pesde/luau/roots/src/index.d.ts delete mode 100644 dist/pesde/luau/roots/src/init.luau delete mode 100644 dist/pesde/luau/roots/src/logger.luau delete mode 100644 dist/pesde/luau/roots/src/methods/destroy.luau delete mode 100644 dist/pesde/luau/roots/src/methods/start.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-lifecycle.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-lifecycles.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-module.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-modules.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-provider.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-providers.luau delete mode 100644 dist/pesde/luau/roots/src/methods/will-finish.luau delete mode 100644 dist/pesde/luau/roots/src/methods/will-start.luau delete mode 100644 dist/pesde/luau/roots/src/types.luau delete mode 100644 dist/pesde/luau/runtime/LICENSE.md delete mode 100644 dist/pesde/luau/runtime/pesde.toml delete mode 100644 dist/pesde/luau/runtime/src/batteries/threadpool.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/init.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/init.spec.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/luau.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/lune.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/lute.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/roblox.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/seal.luau delete mode 100644 dist/pesde/luau/runtime/src/implementations/zune.luau delete mode 100644 dist/pesde/luau/runtime/src/index.d.ts delete mode 100644 dist/pesde/luau/runtime/src/init.luau delete mode 100644 dist/pesde/luau/runtime/src/libs/task.luau delete mode 100644 dist/pesde/luau/runtime/src/libs/task.spec.luau delete mode 100644 dist/pesde/luau/runtime/src/libs/warn.luau delete mode 100644 dist/pesde/luau/runtime/src/types.luau delete mode 100644 dist/pesde/luau/typecheckers/LICENSE.md delete mode 100644 dist/pesde/luau/typecheckers/pesde.toml delete mode 100644 dist/pesde/luau/typecheckers/src/init.luau delete mode 100644 dist/pesde/lune/dependencies/LICENSE.md delete mode 100644 dist/pesde/lune/dependencies/lifecycles.luau delete mode 100644 dist/pesde/lune/dependencies/logger.luau delete mode 100644 dist/pesde/lune/dependencies/pesde.toml delete mode 100644 dist/pesde/lune/dependencies/src/depend.luau delete mode 100644 dist/pesde/lune/dependencies/src/index.d.ts delete mode 100644 dist/pesde/lune/dependencies/src/init.luau delete mode 100644 dist/pesde/lune/dependencies/src/logger.luau delete mode 100644 dist/pesde/lune/dependencies/src/process-dependencies.luau delete mode 100644 dist/pesde/lune/dependencies/src/process-dependencies.spec.luau delete mode 100644 dist/pesde/lune/dependencies/src/sort-by-priority.luau delete mode 100644 dist/pesde/lune/dependencies/src/sort-by-priority.spec.luau delete mode 100644 dist/pesde/lune/dependencies/src/types.luau delete mode 100644 dist/pesde/lune/lifecycles/LICENSE.md delete mode 100644 dist/pesde/lune/lifecycles/logger.luau delete mode 100644 dist/pesde/lune/lifecycles/pesde.toml delete mode 100644 dist/pesde/lune/lifecycles/runtime.luau delete mode 100644 dist/pesde/lune/lifecycles/src/handlers/fire-concurrent.luau delete mode 100644 dist/pesde/lune/lifecycles/src/handlers/fire-sequential.luau delete mode 100644 dist/pesde/lune/lifecycles/src/hooks/lifecycle-constructed.luau delete mode 100644 dist/pesde/lune/lifecycles/src/hooks/lifecycle-destroyed.luau delete mode 100644 dist/pesde/lune/lifecycles/src/hooks/lifecycle-registered.luau delete mode 100644 dist/pesde/lune/lifecycles/src/index.d.ts delete mode 100644 dist/pesde/lune/lifecycles/src/init.luau delete mode 100644 dist/pesde/lune/lifecycles/src/logger.luau delete mode 100644 dist/pesde/lune/lifecycles/src/method-to-lifecycles.luau delete mode 100644 dist/pesde/lune/lifecycles/src/methods/await.luau delete mode 100644 dist/pesde/lune/lifecycles/src/methods/destroy.luau delete mode 100644 dist/pesde/lune/lifecycles/src/methods/on-registered.luau delete mode 100644 dist/pesde/lune/lifecycles/src/methods/register.luau delete mode 100644 dist/pesde/lune/lifecycles/src/methods/unregister-all.luau delete mode 100644 dist/pesde/lune/lifecycles/src/types.luau delete mode 100644 dist/pesde/lune/logger/LICENSE.md delete mode 100644 dist/pesde/lune/logger/pesde.toml delete mode 100644 dist/pesde/lune/logger/runtime.luau delete mode 100644 dist/pesde/lune/logger/src/allow-web-links.luau delete mode 100644 dist/pesde/lune/logger/src/create.luau delete mode 100644 dist/pesde/lune/logger/src/index.d.ts delete mode 100644 dist/pesde/lune/logger/src/init.luau delete mode 100644 dist/pesde/lune/logger/src/parse-error.luau delete mode 100644 dist/pesde/lune/logger/src/standard-error-info-url.luau delete mode 100644 dist/pesde/lune/logger/src/types.luau delete mode 100644 dist/pesde/lune/providers/LICENSE.md delete mode 100644 dist/pesde/lune/providers/dependencies.luau delete mode 100644 dist/pesde/lune/providers/lifecycles.luau delete mode 100644 dist/pesde/lune/providers/logger.luau delete mode 100644 dist/pesde/lune/providers/pesde.toml delete mode 100644 dist/pesde/lune/providers/runtime.luau delete mode 100644 dist/pesde/lune/providers/src/create.luau delete mode 100644 dist/pesde/lune/providers/src/index.d.ts delete mode 100644 dist/pesde/lune/providers/src/init.luau delete mode 100644 dist/pesde/lune/providers/src/name-of.luau delete mode 100644 dist/pesde/lune/providers/src/provider-classes.luau delete mode 100644 dist/pesde/lune/providers/src/types.luau delete mode 100644 dist/pesde/lune/prvdmwrong/LICENSE.md delete mode 100644 dist/pesde/lune/prvdmwrong/dependencies.luau delete mode 100644 dist/pesde/lune/prvdmwrong/lifecycles.luau delete mode 100644 dist/pesde/lune/prvdmwrong/pesde.toml delete mode 100644 dist/pesde/lune/prvdmwrong/providers.luau delete mode 100644 dist/pesde/lune/prvdmwrong/roots.luau delete mode 100644 dist/pesde/lune/prvdmwrong/src/index.d.ts delete mode 100644 dist/pesde/lune/rbx-components/LICENSE.md delete mode 100644 dist/pesde/lune/rbx-components/dependencies.luau delete mode 100644 dist/pesde/lune/rbx-components/logger.luau delete mode 100644 dist/pesde/lune/rbx-components/pesde.toml delete mode 100644 dist/pesde/lune/rbx-components/providers.luau delete mode 100644 dist/pesde/lune/rbx-components/roots.luau delete mode 100644 dist/pesde/lune/rbx-components/src/component-provider.luau delete mode 100644 dist/pesde/lune/rbx-components/src/extend-root/init.luau delete mode 100644 dist/pesde/lune/rbx-components/src/extend-root/use-modules-as-components.luau delete mode 100644 dist/pesde/lune/rbx-components/src/init.luau delete mode 100644 dist/pesde/lune/rbx-components/src/types.luau delete mode 100644 dist/pesde/lune/roots/LICENSE.md delete mode 100644 dist/pesde/lune/roots/dependencies.luau delete mode 100644 dist/pesde/lune/roots/lifecycles.luau delete mode 100644 dist/pesde/lune/roots/logger.luau delete mode 100644 dist/pesde/lune/roots/pesde.toml delete mode 100644 dist/pesde/lune/roots/providers.luau delete mode 100644 dist/pesde/lune/roots/runtime.luau delete mode 100644 dist/pesde/lune/roots/src/create.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/root-destroyed.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/root-finished.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/root-started.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/root-used.luau delete mode 100644 dist/pesde/lune/roots/src/index.d.ts delete mode 100644 dist/pesde/lune/roots/src/init.luau delete mode 100644 dist/pesde/lune/roots/src/methods/destroy.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-lifecycles.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-providers.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-root.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-roots.luau delete mode 100644 dist/pesde/lune/roots/src/methods/will-finish.luau delete mode 100644 dist/pesde/lune/roots/src/methods/will-start.luau delete mode 100644 dist/pesde/lune/runtime/LICENSE.md delete mode 100644 dist/pesde/lune/runtime/pesde.toml delete mode 100644 dist/pesde/lune/runtime/src/implementations/init.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/init.spec.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/luau.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/lune.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/lute.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/roblox.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/seal.luau delete mode 100644 dist/pesde/lune/runtime/src/implementations/zune.luau delete mode 100644 dist/pesde/lune/runtime/src/index.d.ts delete mode 100644 dist/pesde/lune/runtime/src/init.luau delete mode 100644 dist/pesde/lune/runtime/src/libs/task.luau delete mode 100644 dist/pesde/lune/runtime/src/libs/task.spec.luau delete mode 100644 dist/pesde/lune/runtime/src/libs/warn.luau delete mode 100644 dist/pesde/lune/runtime/src/types.luau delete mode 100644 dist/pesde/lune/typecheckers/LICENSE.md delete mode 100644 dist/pesde/lune/typecheckers/pesde.toml delete mode 100644 dist/pesde/lune/typecheckers/src/init.luau delete mode 100644 dist/pesde/roblox/dependencies/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/dependencies/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/dependencies/LICENSE.md delete mode 100644 dist/pesde/roblox/dependencies/lifecycles.luau delete mode 100644 dist/pesde/roblox/dependencies/logger.luau delete mode 100644 dist/pesde/roblox/dependencies/pesde.toml delete mode 100644 dist/pesde/roblox/dependencies/src/depend.luau delete mode 100644 dist/pesde/roblox/dependencies/src/index.d.ts delete mode 100644 dist/pesde/roblox/dependencies/src/init.luau delete mode 100644 dist/pesde/roblox/dependencies/src/logger.luau delete mode 100644 dist/pesde/roblox/dependencies/src/process-dependencies.luau delete mode 100644 dist/pesde/roblox/dependencies/src/process-dependencies.spec.luau delete mode 100644 dist/pesde/roblox/dependencies/src/sort-by-priority.luau delete mode 100644 dist/pesde/roblox/dependencies/src/sort-by-priority.spec.luau delete mode 100644 dist/pesde/roblox/dependencies/src/types.luau delete mode 100644 dist/pesde/roblox/lifecycles/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/lifecycles/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/lifecycles/LICENSE.md delete mode 100644 dist/pesde/roblox/lifecycles/logger.luau delete mode 100644 dist/pesde/roblox/lifecycles/pesde.toml delete mode 100644 dist/pesde/roblox/lifecycles/runtime.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/create.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/handlers/fire-concurrent.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/hooks/lifecycle-constructed.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/hooks/lifecycle-unregistered.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/index.d.ts delete mode 100644 dist/pesde/roblox/lifecycles/src/init.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/logger.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/method-to-lifecycles.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/await.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/destroy.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/on-registered.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/on-unregistered.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/unregister.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/types.luau delete mode 100644 dist/pesde/roblox/logger/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/logger/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/logger/LICENSE.md delete mode 100644 dist/pesde/roblox/logger/pesde.toml delete mode 100644 dist/pesde/roblox/logger/runtime.luau delete mode 100644 dist/pesde/roblox/logger/src/allow-web-links.luau delete mode 100644 dist/pesde/roblox/logger/src/create.luau delete mode 100644 dist/pesde/roblox/logger/src/format-log.luau delete mode 100644 dist/pesde/roblox/logger/src/index.d.ts delete mode 100644 dist/pesde/roblox/logger/src/init.luau delete mode 100644 dist/pesde/roblox/logger/src/parse-error.luau delete mode 100644 dist/pesde/roblox/logger/src/standard-error-info-url.luau delete mode 100644 dist/pesde/roblox/logger/src/types.luau delete mode 100644 dist/pesde/roblox/providers/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/providers/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/providers/LICENSE.md delete mode 100644 dist/pesde/roblox/providers/dependencies.luau delete mode 100644 dist/pesde/roblox/providers/lifecycles.luau delete mode 100644 dist/pesde/roblox/providers/logger.luau delete mode 100644 dist/pesde/roblox/providers/pesde.toml delete mode 100644 dist/pesde/roblox/providers/runtime.luau delete mode 100644 dist/pesde/roblox/providers/src/create.luau delete mode 100644 dist/pesde/roblox/providers/src/index.d.ts delete mode 100644 dist/pesde/roblox/providers/src/init.luau delete mode 100644 dist/pesde/roblox/providers/src/name-of.luau delete mode 100644 dist/pesde/roblox/providers/src/provider-classes.luau delete mode 100644 dist/pesde/roblox/providers/src/types.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/LICENSE.md delete mode 100644 dist/pesde/roblox/prvdmwrong/dependencies.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/lifecycles.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/pesde.toml delete mode 100644 dist/pesde/roblox/prvdmwrong/providers.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/roots.luau delete mode 100644 dist/pesde/roblox/prvdmwrong/src/index.d.ts delete mode 100644 dist/pesde/roblox/prvdmwrong/src/init.luau delete mode 100644 dist/pesde/roblox/rbx-components/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/rbx-components/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/rbx-components/LICENSE.md delete mode 100644 dist/pesde/roblox/rbx-components/dependencies.luau delete mode 100644 dist/pesde/roblox/rbx-components/logger.luau delete mode 100644 dist/pesde/roblox/rbx-components/pesde.toml delete mode 100644 dist/pesde/roblox/rbx-components/providers.luau delete mode 100644 dist/pesde/roblox/rbx-components/roots.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/component-classes.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/create.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/create-component-class-provider.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/init.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/use-component.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/use-components.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/use-module-as-component.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/extend-root/use-modules-as-components.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/init.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/logger.luau delete mode 100644 dist/pesde/roblox/rbx-components/src/types.luau delete mode 100644 dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/rbx-lifecycles/LICENSE.md delete mode 100644 dist/pesde/roblox/rbx-lifecycles/pesde.toml delete mode 100644 dist/pesde/roblox/rbx-lifecycles/prvdmwrong.luau delete mode 100644 dist/pesde/roblox/rbx-lifecycles/src/index.d.ts delete mode 100644 dist/pesde/roblox/rbx-lifecycles/src/init.luau delete mode 100644 dist/pesde/roblox/roots/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/roots/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/roots/LICENSE.md delete mode 100644 dist/pesde/roblox/roots/dependencies.luau delete mode 100644 dist/pesde/roblox/roots/lifecycles.luau delete mode 100644 dist/pesde/roblox/roots/logger.luau delete mode 100644 dist/pesde/roblox/roots/pesde.toml delete mode 100644 dist/pesde/roblox/roots/providers.luau delete mode 100644 dist/pesde/roblox/roots/runtime.luau delete mode 100644 dist/pesde/roblox/roots/src/create.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/lifecycle-used.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/provider-used.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/root-constructing.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/root-finished.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/root-used.luau delete mode 100644 dist/pesde/roblox/roots/src/index.d.ts delete mode 100644 dist/pesde/roblox/roots/src/init.luau delete mode 100644 dist/pesde/roblox/roots/src/logger.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/start.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-lifecycle.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-module.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-modules.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-provider.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-root.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/use-roots.luau delete mode 100644 dist/pesde/roblox/roots/src/types.luau delete mode 100644 dist/pesde/roblox/runtime/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/runtime/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/runtime/LICENSE.md delete mode 100644 dist/pesde/roblox/runtime/pesde.toml delete mode 100644 dist/pesde/roblox/runtime/src/batteries/threadpool.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/init.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/init.spec.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/luau.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/lune.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/lute.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/roblox.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/seal.luau delete mode 100644 dist/pesde/roblox/runtime/src/implementations/zune.luau delete mode 100644 dist/pesde/roblox/runtime/src/index.d.ts delete mode 100644 dist/pesde/roblox/runtime/src/init.luau delete mode 100644 dist/pesde/roblox/runtime/src/libs/task.luau delete mode 100644 dist/pesde/roblox/runtime/src/libs/task.spec.luau delete mode 100644 dist/pesde/roblox/runtime/src/libs/warn.luau delete mode 100644 dist/pesde/roblox/runtime/src/types.luau delete mode 100644 dist/pesde/roblox/typecheckers/.pesde/scripts/roblox_sync_config_generator.luau delete mode 100644 dist/pesde/roblox/typecheckers/.pesde/scripts/sourcemap-generator.luau delete mode 100644 dist/pesde/roblox/typecheckers/LICENSE.md delete mode 100644 dist/pesde/roblox/typecheckers/pesde.toml delete mode 100644 dist/pesde/roblox/typecheckers/src/init.luau delete mode 100644 dist/wally/dependencies/LICENSE.md delete mode 100644 dist/wally/dependencies/Wally.toml delete mode 100644 dist/wally/dependencies/lifecycles.luau delete mode 100644 dist/wally/dependencies/logger.luau delete mode 100644 dist/wally/dependencies/src/depend.luau delete mode 100644 dist/wally/dependencies/src/index.d.ts delete mode 100644 dist/wally/dependencies/src/init.luau delete mode 100644 dist/wally/dependencies/src/logger.luau delete mode 100644 dist/wally/dependencies/src/process-dependencies.luau delete mode 100644 dist/wally/dependencies/src/process-dependencies.spec.luau delete mode 100644 dist/wally/dependencies/src/sort-by-priority.luau delete mode 100644 dist/wally/dependencies/src/sort-by-priority.spec.luau delete mode 100644 dist/wally/dependencies/src/types.luau delete mode 100644 dist/wally/lifecycles/LICENSE.md delete mode 100644 dist/wally/lifecycles/Wally.toml delete mode 100644 dist/wally/lifecycles/logger.luau delete mode 100644 dist/wally/lifecycles/runtime.luau delete mode 100644 dist/wally/lifecycles/src/create.luau delete mode 100644 dist/wally/lifecycles/src/handlers/fire-concurrent.luau delete mode 100644 dist/wally/lifecycles/src/handlers/fire-sequential.luau delete mode 100644 dist/wally/lifecycles/src/hooks/lifecycle-constructed.luau delete mode 100644 dist/wally/lifecycles/src/hooks/lifecycle-destroyed.luau delete mode 100644 dist/wally/lifecycles/src/hooks/lifecycle-registered.luau delete mode 100644 dist/wally/lifecycles/src/hooks/lifecycle-unregistered.luau delete mode 100644 dist/wally/lifecycles/src/index.d.ts delete mode 100644 dist/wally/lifecycles/src/init.luau delete mode 100644 dist/wally/lifecycles/src/logger.luau delete mode 100644 dist/wally/lifecycles/src/method-to-lifecycles.luau delete mode 100644 dist/wally/lifecycles/src/methods/await.luau delete mode 100644 dist/wally/lifecycles/src/methods/destroy.luau delete mode 100644 dist/wally/lifecycles/src/methods/on-registered.luau delete mode 100644 dist/wally/lifecycles/src/methods/on-unregistered.luau delete mode 100644 dist/wally/lifecycles/src/methods/register.luau delete mode 100644 dist/wally/lifecycles/src/methods/unregister-all.luau delete mode 100644 dist/wally/lifecycles/src/methods/unregister.luau delete mode 100644 dist/wally/lifecycles/src/types.luau delete mode 100644 dist/wally/logger/LICENSE.md delete mode 100644 dist/wally/logger/Wally.toml delete mode 100644 dist/wally/logger/runtime.luau delete mode 100644 dist/wally/logger/src/allow-web-links.luau delete mode 100644 dist/wally/logger/src/create.luau delete mode 100644 dist/wally/logger/src/format-log.luau delete mode 100644 dist/wally/logger/src/index.d.ts delete mode 100644 dist/wally/logger/src/init.luau delete mode 100644 dist/wally/logger/src/parse-error.luau delete mode 100644 dist/wally/logger/src/standard-error-info-url.luau delete mode 100644 dist/wally/logger/src/types.luau delete mode 100644 dist/wally/providers/LICENSE.md delete mode 100644 dist/wally/providers/Wally.toml delete mode 100644 dist/wally/providers/dependencies.luau delete mode 100644 dist/wally/providers/lifecycles.luau delete mode 100644 dist/wally/providers/logger.luau delete mode 100644 dist/wally/providers/runtime.luau delete mode 100644 dist/wally/providers/src/create.luau delete mode 100644 dist/wally/providers/src/index.d.ts delete mode 100644 dist/wally/providers/src/init.luau delete mode 100644 dist/wally/providers/src/name-of.luau delete mode 100644 dist/wally/providers/src/provider-classes.luau delete mode 100644 dist/wally/providers/src/types.luau delete mode 100644 dist/wally/prvdmwrong/LICENSE.md delete mode 100644 dist/wally/prvdmwrong/Wally.toml delete mode 100644 dist/wally/prvdmwrong/dependencies.luau delete mode 100644 dist/wally/prvdmwrong/lifecycles.luau delete mode 100644 dist/wally/prvdmwrong/providers.luau delete mode 100644 dist/wally/prvdmwrong/roots.luau delete mode 100644 dist/wally/prvdmwrong/src/index.d.ts delete mode 100644 dist/wally/prvdmwrong/src/init.luau delete mode 100644 dist/wally/rbx-components/LICENSE.md delete mode 100644 dist/wally/rbx-components/Wally.toml delete mode 100644 dist/wally/rbx-components/dependencies.luau delete mode 100644 dist/wally/rbx-components/logger.luau delete mode 100644 dist/wally/rbx-components/providers.luau delete mode 100644 dist/wally/rbx-components/roots.luau delete mode 100644 dist/wally/rbx-components/src/component-classes.luau delete mode 100644 dist/wally/rbx-components/src/component-provider.luau delete mode 100644 dist/wally/rbx-components/src/create.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/create-component-class-provider.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/init.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/use-component.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/use-components.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/use-module-as-component.luau delete mode 100644 dist/wally/rbx-components/src/extend-root/use-modules-as-components.luau delete mode 100644 dist/wally/rbx-components/src/init.luau delete mode 100644 dist/wally/rbx-components/src/logger.luau delete mode 100644 dist/wally/rbx-components/src/types.luau delete mode 100644 dist/wally/rbx-lifecycles/LICENSE.md delete mode 100644 dist/wally/rbx-lifecycles/Wally.toml delete mode 100644 dist/wally/rbx-lifecycles/prvdmwrong.luau delete mode 100644 dist/wally/rbx-lifecycles/src/index.d.ts delete mode 100644 dist/wally/rbx-lifecycles/src/init.luau delete mode 100644 dist/wally/roots/LICENSE.md delete mode 100644 dist/wally/roots/Wally.toml delete mode 100644 dist/wally/roots/dependencies.luau delete mode 100644 dist/wally/roots/lifecycles.luau delete mode 100644 dist/wally/roots/logger.luau delete mode 100644 dist/wally/roots/providers.luau delete mode 100644 dist/wally/roots/runtime.luau delete mode 100644 dist/wally/roots/src/create.luau delete mode 100644 dist/wally/roots/src/hooks/lifecycle-used.luau delete mode 100644 dist/wally/roots/src/hooks/provider-used.luau delete mode 100644 dist/wally/roots/src/hooks/root-constructing.luau delete mode 100644 dist/wally/roots/src/hooks/root-destroyed.luau delete mode 100644 dist/wally/roots/src/hooks/root-finished.luau delete mode 100644 dist/wally/roots/src/hooks/root-started.luau delete mode 100644 dist/wally/roots/src/hooks/root-used.luau delete mode 100644 dist/wally/roots/src/index.d.ts delete mode 100644 dist/wally/roots/src/init.luau delete mode 100644 dist/wally/roots/src/logger.luau delete mode 100644 dist/wally/roots/src/methods/destroy.luau delete mode 100644 dist/wally/roots/src/methods/start.luau delete mode 100644 dist/wally/roots/src/methods/use-lifecycle.luau delete mode 100644 dist/wally/roots/src/methods/use-lifecycles.luau delete mode 100644 dist/wally/roots/src/methods/use-module.luau delete mode 100644 dist/wally/roots/src/methods/use-modules.luau delete mode 100644 dist/wally/roots/src/methods/use-provider.luau delete mode 100644 dist/wally/roots/src/methods/use-providers.luau delete mode 100644 dist/wally/roots/src/methods/use-root.luau delete mode 100644 dist/wally/roots/src/methods/use-roots.luau delete mode 100644 dist/wally/roots/src/methods/will-finish.luau delete mode 100644 dist/wally/roots/src/methods/will-start.luau delete mode 100644 dist/wally/roots/src/types.luau delete mode 100644 dist/wally/runtime/LICENSE.md delete mode 100644 dist/wally/runtime/Wally.toml delete mode 100644 dist/wally/runtime/src/batteries/threadpool.luau delete mode 100644 dist/wally/runtime/src/implementations/init.luau delete mode 100644 dist/wally/runtime/src/implementations/init.spec.luau delete mode 100644 dist/wally/runtime/src/implementations/luau.luau delete mode 100644 dist/wally/runtime/src/implementations/lune.luau delete mode 100644 dist/wally/runtime/src/implementations/lute.luau delete mode 100644 dist/wally/runtime/src/implementations/roblox.luau delete mode 100644 dist/wally/runtime/src/implementations/seal.luau delete mode 100644 dist/wally/runtime/src/implementations/zune.luau delete mode 100644 dist/wally/runtime/src/index.d.ts delete mode 100644 dist/wally/runtime/src/init.luau delete mode 100644 dist/wally/runtime/src/libs/task.luau delete mode 100644 dist/wally/runtime/src/libs/task.spec.luau delete mode 100644 dist/wally/runtime/src/libs/warn.luau delete mode 100644 dist/wally/runtime/src/types.luau delete mode 100644 dist/wally/typecheckers/LICENSE.md delete mode 100644 dist/wally/typecheckers/Wally.toml delete mode 100644 dist/wally/typecheckers/src/init.luau delete mode 100644 gh-assets/wordmark-dark.svg delete mode 100644 gh-assets/wordmark-light.svg rename {dist/pesde/lune/lifecycles/src => lifecycles}/create.luau (60%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/handlers/fire-concurrent.luau (73%) rename {dist/pesde/roblox/lifecycles/src => lifecycles}/handlers/fire-sequential.luau (84%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/hooks/lifecycle-constructed.luau (65%) rename {dist/pesde/roblox/lifecycles/src => lifecycles}/hooks/lifecycle-destroyed.luau (65%) rename {dist/pesde/roblox/lifecycles/src => lifecycles}/hooks/lifecycle-registered.luau (70%) rename {dist/pesde/lune/lifecycles/src => lifecycles}/hooks/lifecycle-unregistered.luau (71%) create mode 100644 lifecycles/init.luau rename {dist/npm/lifecycles/src => lifecycles}/logger.luau (76%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/method-to-lifecycles.luau (73%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/methods/await.luau (64%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/methods/destroy.luau (53%) rename {dist/pesde/luau/lifecycles/src => lifecycles}/methods/on-registered.luau (54%) rename {dist/pesde/lune/lifecycles/src => lifecycles}/methods/on-unregistered.luau (54%) rename {dist/pesde/roblox/lifecycles/src => lifecycles}/methods/register.luau (65%) rename {dist/pesde/roblox/lifecycles/src => lifecycles}/methods/unregister-all.luau (56%) rename {dist/pesde/lune/lifecycles/src => lifecycles}/methods/unregister.luau (62%) rename {dist/npm/lifecycles/src => lifecycles}/types.luau (100%) rename {dist/pesde/luau/logger/src => logger}/allow-web-links.luau (77%) create mode 100644 logger/create.luau rename {dist/pesde/lune/logger/src => logger}/format-log.luau (96%) create mode 100644 logger/init.luau rename {dist/pesde/luau/logger/src => logger}/parse-error.luau (85%) rename {dist/npm/logger/src => logger}/standard-error-info-url.luau (100%) rename {dist/npm/logger/src => logger}/types.luau (100%) delete mode 100644 lune/run-example.luau delete mode 100644 lune/tiniest.luau delete mode 100644 package.json delete mode 100644 packages/dependencies/depend.luau delete mode 100644 packages/dependencies/index.d.ts delete mode 100644 packages/dependencies/init.luau delete mode 100644 packages/dependencies/logger.luau delete mode 100644 packages/dependencies/process-dependencies.luau delete mode 100644 packages/dependencies/process-dependencies.spec.luau delete mode 100644 packages/dependencies/prvd.config.luau delete mode 100644 packages/dependencies/sort-by-priority.luau delete mode 100644 packages/dependencies/sort-by-priority.spec.luau delete mode 100644 packages/dependencies/types.luau delete mode 100644 packages/lifecycles/create.luau delete mode 100644 packages/lifecycles/handlers/fire-concurrent.luau delete mode 100644 packages/lifecycles/handlers/fire-sequential.luau delete mode 100644 packages/lifecycles/hooks/lifecycle-constructed.luau delete mode 100644 packages/lifecycles/hooks/lifecycle-destroyed.luau delete mode 100644 packages/lifecycles/hooks/lifecycle-registered.luau delete mode 100644 packages/lifecycles/hooks/lifecycle-unregistered.luau delete mode 100644 packages/lifecycles/index.d.ts delete mode 100644 packages/lifecycles/init.luau delete mode 100644 packages/lifecycles/logger.luau delete mode 100644 packages/lifecycles/method-to-lifecycles.luau delete mode 100644 packages/lifecycles/methods/await.luau delete mode 100644 packages/lifecycles/methods/destroy.luau delete mode 100644 packages/lifecycles/methods/on-registered.luau delete mode 100644 packages/lifecycles/methods/on-unregistered.luau delete mode 100644 packages/lifecycles/methods/register.luau delete mode 100644 packages/lifecycles/methods/unregister-all.luau delete mode 100644 packages/lifecycles/methods/unregister.luau delete mode 100644 packages/lifecycles/prvd.config.luau delete mode 100644 packages/lifecycles/types.luau delete mode 100644 packages/logger/allow-web-links.luau delete mode 100644 packages/logger/create.luau delete mode 100644 packages/logger/format-log.luau delete mode 100644 packages/logger/index.d.ts delete mode 100644 packages/logger/init.luau delete mode 100644 packages/logger/parse-error.luau delete mode 100644 packages/logger/prvd.config.luau delete mode 100644 packages/logger/standard-error-info-url.luau delete mode 100644 packages/logger/types.luau delete mode 100644 packages/providers/README.md delete mode 100644 packages/providers/create.luau delete mode 100644 packages/providers/index.d.ts delete mode 100644 packages/providers/init.luau delete mode 100644 packages/providers/name-of.luau delete mode 100644 packages/providers/provider-classes.luau delete mode 100644 packages/providers/prvd.config.luau delete mode 100644 packages/providers/types.luau delete mode 100644 packages/prvdmwrong/index.d.ts delete mode 100644 packages/prvdmwrong/init.luau delete mode 100644 packages/prvdmwrong/prvd.config.luau delete mode 100644 packages/rbx-components/component-classes.luau delete mode 100644 packages/rbx-components/component-provider.luau delete mode 100644 packages/rbx-components/create.luau delete mode 100644 packages/rbx-components/extend-root/create-component-class-provider.luau delete mode 100644 packages/rbx-components/extend-root/init.luau delete mode 100644 packages/rbx-components/extend-root/use-component.luau delete mode 100644 packages/rbx-components/extend-root/use-components.luau delete mode 100644 packages/rbx-components/extend-root/use-module-as-component.luau delete mode 100644 packages/rbx-components/extend-root/use-modules-as-components.luau delete mode 100644 packages/rbx-components/init.luau delete mode 100644 packages/rbx-components/logger.luau delete mode 100644 packages/rbx-components/prvd.config.luau delete mode 100644 packages/rbx-components/types.luau delete mode 100644 packages/rbx-lifecycles/index.d.ts delete mode 100644 packages/rbx-lifecycles/init.luau delete mode 100644 packages/rbx-lifecycles/prvd.config.luau delete mode 100644 packages/roots/create.luau delete mode 100644 packages/roots/hooks/lifecycle-used.luau delete mode 100644 packages/roots/hooks/provider-used.luau delete mode 100644 packages/roots/hooks/root-constructing.luau delete mode 100644 packages/roots/hooks/root-destroyed.luau delete mode 100644 packages/roots/hooks/root-finished.luau delete mode 100644 packages/roots/hooks/root-started.luau delete mode 100644 packages/roots/hooks/root-used.luau delete mode 100644 packages/roots/index.d.ts delete mode 100644 packages/roots/init.luau delete mode 100644 packages/roots/logger.luau delete mode 100644 packages/roots/methods/destroy.luau delete mode 100644 packages/roots/methods/start.luau delete mode 100644 packages/roots/methods/use-lifecycle.luau delete mode 100644 packages/roots/methods/use-lifecycles.luau delete mode 100644 packages/roots/methods/use-module.luau delete mode 100644 packages/roots/methods/use-modules.luau delete mode 100644 packages/roots/methods/use-provider.luau delete mode 100644 packages/roots/methods/use-providers.luau delete mode 100644 packages/roots/methods/use-root.luau delete mode 100644 packages/roots/methods/use-roots.luau delete mode 100644 packages/roots/methods/will-finish.luau delete mode 100644 packages/roots/methods/will-start.luau delete mode 100644 packages/roots/prvd.config.luau delete mode 100644 packages/roots/types.luau delete mode 100644 packages/runtime/batteries/threadpool.luau delete mode 100644 packages/runtime/implementations/init.luau delete mode 100644 packages/runtime/implementations/init.spec.luau delete mode 100644 packages/runtime/implementations/luau.luau delete mode 100644 packages/runtime/implementations/lune.luau delete mode 100644 packages/runtime/implementations/lute.luau delete mode 100644 packages/runtime/implementations/roblox.luau delete mode 100644 packages/runtime/implementations/seal.luau delete mode 100644 packages/runtime/implementations/zune.luau delete mode 100644 packages/runtime/index.d.ts delete mode 100644 packages/runtime/init.luau delete mode 100644 packages/runtime/libs/task.luau delete mode 100644 packages/runtime/libs/task.spec.luau delete mode 100644 packages/runtime/libs/warn.luau delete mode 100644 packages/runtime/prvd.config.luau delete mode 100644 packages/runtime/types.luau delete mode 100644 packages/typecheckers/init.luau delete mode 100644 packages/typecheckers/prvd.config.luau delete mode 100644 pesde.toml create mode 100644 providers/create.luau create mode 100644 providers/init.luau create mode 100644 providers/name-of.luau rename {dist/npm/providers/src => providers}/provider-classes.luau (81%) rename {dist/npm/providers/src => providers}/types.luau (66%) delete mode 100644 prvd.config.luau rename {dist/pesde/lune/prvdmwrong/src => prvdmwrong}/init.luau (79%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/component-classes.luau (81%) rename {dist/pesde/roblox/rbx-components/src => rbx-components}/component-provider.luau (80%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/create.luau (62%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/extend-root/create-component-class-provider.luau (80%) create mode 100644 rbx-components/extend-root/init.luau rename {dist/pesde/lune/rbx-components/src => rbx-components}/extend-root/use-component.luau (82%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/extend-root/use-components.luau (86%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/extend-root/use-module-as-component.luau (50%) create mode 100644 rbx-components/extend-root/use-modules-as-components.luau rename {dist/npm/rbx-components/src => rbx-components}/init.luau (59%) rename {dist/pesde/lune/rbx-components/src => rbx-components}/logger.luau (87%) rename {dist/pesde/luau/rbx-components/src => rbx-components}/types.luau (92%) create mode 100644 rbx-lifecycles/init.luau delete mode 100644 rokit.toml create mode 100644 roots/create.luau rename {dist/pesde/lune/roots/src => roots}/hooks/lifecycle-used.luau (60%) rename {dist/pesde/lune/roots/src => roots}/hooks/provider-used.luau (61%) rename {dist/pesde/lune/roots/src => roots}/hooks/root-constructing.luau (62%) rename {dist/pesde/roblox/roots/src => roots}/hooks/root-destroyed.luau (61%) rename {dist/pesde/luau/roots/src => roots}/hooks/root-finished.luau (61%) rename {dist/pesde/roblox/roots/src => roots}/hooks/root-started.luau (61%) rename {dist/pesde/luau/roots/src => roots}/hooks/root-used.luau (64%) create mode 100644 roots/init.luau rename {dist/pesde/lune/roots/src => roots}/logger.luau (81%) rename {dist/pesde/roblox/roots/src => roots}/methods/destroy.luau (58%) rename {dist/pesde/lune/roots/src => roots}/methods/start.luau (62%) rename {dist/pesde/lune/roots/src => roots}/methods/use-lifecycle.luau (73%) rename {dist/pesde/roblox/roots/src => roots}/methods/use-lifecycles.luau (75%) rename {dist/pesde/lune/roots/src => roots}/methods/use-module.luau (68%) rename {dist/pesde/lune/roots/src => roots}/methods/use-modules.luau (63%) rename {dist/pesde/lune/roots/src => roots}/methods/use-provider.luau (72%) rename {dist/pesde/roblox/roots/src => roots}/methods/use-providers.luau (75%) rename {dist/pesde/luau/roots/src => roots}/methods/use-root.luau (78%) rename {dist/pesde/luau/roots/src => roots}/methods/use-roots.luau (81%) rename {dist/pesde/roblox/roots/src => roots}/methods/will-finish.luau (79%) rename {dist/pesde/roblox/roots/src => roots}/methods/will-start.luau (79%) rename {dist/pesde/lune/roots/src => roots}/types.luau (84%) create mode 100644 runtime/init.luau rename {dist/pesde/lune/runtime/src/batteries => runtime}/threadpool.luau (76%) rename {dist/npm/runtime/src => runtime}/types.luau (53%) delete mode 100644 sitegen/README.md delete mode 100644 sitegen/build.luau delete mode 100644 sitegen/components/article.luau delete mode 100644 sitegen/components/button.luau delete mode 100644 sitegen/components/code-snippet.luau delete mode 100644 sitegen/components/document.luau delete mode 100644 sitegen/components/navbar.luau delete mode 100644 sitegen/config/common-urls.luau delete mode 100644 sitegen/config/nav-pages.luau delete mode 100644 sitegen/config/site-urls.luau delete mode 100644 sitegen/config/sitemap.luau delete mode 100644 sitegen/h.luau delete mode 100644 sitegen/init.luau delete mode 100644 sitegen/pages/api/index.luau delete mode 100644 sitegen/pages/index.luau delete mode 100644 sitegen/pages/learn/fundamentals/lifecycles.luau delete mode 100644 sitegen/pages/learn/fundamentals/providers.luau delete mode 100644 sitegen/pages/learn/fundamentals/roots.luau delete mode 100644 sitegen/pages/learn/fundamentals/using-dependencies.luau delete mode 100644 sitegen/pages/learn/index.luau delete mode 100644 sitegen/pages/learn/installation.luau delete mode 100644 sitegen/pages/learn/roblox/components.luau delete mode 100644 sitegen/pages/learn/roblox/roblox-lifecycles.luau delete mode 100644 sitegen/publish.luau delete mode 100644 sitegen/static/fonts/jura.ttf delete mode 100644 sitegen/static/stylesheets/article.css delete mode 100644 sitegen/static/stylesheets/common.css delete mode 100644 sitegen/static/stylesheets/fonts.css delete mode 100644 sitegen/static/stylesheets/landing.css delete mode 100644 sitegen/static/stylesheets/reset.css delete mode 100644 sitegen/utils/for-each.luau delete mode 100644 sitegen/utils/site-base-url.luau delete mode 100644 stylua.toml delete mode 100644 tsconfig.json rename {.lune/lib/publish => typecheckers}/init.luau (100%) delete mode 100644 types/g.d.luau diff --git a/.config.luau b/.config.luau new file mode 100644 index 00000000..dfddbbb7 --- /dev/null +++ b/.config.luau @@ -0,0 +1,12 @@ +return { + wth = { + placeMixin = { + transpile = true, + folderName = "Prvd", + rojo = { + { name = "ReplicatedStorage" }, + { name = "Packages", className = "Folder" }, + }, + }, + }, +} diff --git a/.luaurc b/.luaurc deleted file mode 100644 index c87318e6..00000000 --- a/.luaurc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "languageMode": "strict", - "lint": { - "*": true - }, - "aliases": { - "lune-lib": "./.lune/lib", - "lune": "~/.lune/.typedefs/0.10.4/", - "sitegen": "./sitegen", - "zcore": "~/.zune/typedefs/core" - } -} diff --git a/.lune/build.luau b/.lune/build.luau deleted file mode 100644 index dcc71110..00000000 --- a/.lune/build.luau +++ /dev/null @@ -1,425 +0,0 @@ -local collectPackages = require("@lune-lib/utils/collect-packages") -local fs = require("@lune/fs") -local path = require("@lune-lib/utils/path") -local process = require("@lune/process") -local roblox = require("@lune/roblox") -local rootConfig = require("@lune-lib/root-config") -local selectPackages = require("@lune-lib/utils/select-packages") -local serde = require("@lune/serde") -local types = require("@lune-lib/types") - -local packages = selectPackages(collectPackages(process.cwd, rootConfig.packageDir)) -local _, nameToPackage, toBuild = packages.names, packages.nameToPackage, packages.selected - -local distPath = path(process.cwd, "dist") -local distPesdePath = path(distPath, "pesde") -local distWallyPath = path(distPath, "wally") -local distNpmPath = path(distPath, "npm") -local distModelPath = path(distPath, "models") -local distTempPath = path(distPath, "temp") -local distBundlePath = path(distPath, "bundle.rbxm") -local distBundlePlacePath = path(distPath, "bundle.rbxl") - -if fs.isDir(distPath) then - fs.removeDir(distPath) -end - -fs.writeDir(distPath) -fs.writeDir(distPesdePath) -fs.writeDir(distWallyPath) -fs.writeDir(distNpmPath) -fs.writeDir(distModelPath) -fs.writeDir(distTempPath) - -local function copyPackageDir(package: types.Package, destinationDir: string) - for _, file in fs.readDir(package.absolutePath) do - if fs.isFile(file) then - if not file:match("%.luau$") or file == "prvd.config.luau" then - continue - end - end - fs.copy(path(package.absolutePath, file), path(destinationDir, file)) - end -end - -local function generateLinkerFile(package: types.Package, requirePath: string) - local linkerSource = { `local DEPENDENCY = require("{requirePath}")` } - - local packageTypes = package.config.types - if packageTypes then - for type, value in packageTypes do - table.insert(linkerSource, `export type {type} = DEPENDENCY.{if value == true then type else value}`) - end - end - - table.insert(linkerSource, "return DEPENDENCY\n") - - return table.concat(linkerSource, "\n") -end - -local function packageLicensePath(package: types.Package) - return if package.config.license then path(package.absolutePath, "LICENSE.md") else path(process.cwd, "LICENSE.md") -end - --- Pesde - -local packageForPesde -do - type PesdeEnvironment = "roblox" | "roblox_server" | "luau" | "lune" - - type PesdeTarget = { - environment: PesdeEnvironment, - lib: string, - build_files: { string }, - } - - type PesdeIndices = { - default: string, - } - - type PesdeDependency = { - name: string, - version: string, - index: string?, - target: PesdeEnvironment?, - } - - type PesdeManifest = { - name: string, - version: string, - description: string, - license: string, - authors: { string }, - repository: string, - - indices: { - default: string, - }, - - includes: { string }, - - target: PesdeTarget, - - dependencies: { [string]: PesdeDependency }?, - } - - local DEFAULT_TARGETS: { [PesdeEnvironment]: true } = { - roblox = true, - luau = true, - lune = true, - } - - local SYBAU_PESDE = '\ - [scripts]\ - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau"\ - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau"\ - \ - [dev_dependencies]\ - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" }\ - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" }\ - ' - - local function pesdeify(name: string) - return (string.gsub(name, "%-", "_")) - end - - function packageForPesde(package: types.Package) - local targets: { [PesdeEnvironment]: true } = package.config.pesdeTargets or DEFAULT_TARGETS - - local baseManifest: PesdeManifest = { - name = pesdeify(`{rootConfig.publishers.pesde.scope}/{package.config.name}`), - version = package.config.version or rootConfig.defaults.version, - description = package.config.description, - license = package.config.license or rootConfig.defaults.license, - authors = package.config.authors or rootConfig.defaults.authors, - repository = rootConfig.repository, - - indices = { - default = rootConfig.publishers.pesde.registry, - }, - - includes = { - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - }, - - target = { - environment = nil :: any, - lib = "src/init.luau", - build_files = { - "src", - }, - }, - } - - -- NOTE: serde is ass, we serializing this by hand - local dependencies = { "[dependencies]" } - local linkerFiles: { [string]: string } = {} - if package.config.dependencies then - for dependency in package.config.dependencies do - local dependentPackage = nameToPackage[dependency] - - -- I love stylua - table.insert( - dependencies, - `{dependency} = \{ workspace = "{pesdeify( - `{rootConfig.publishers.pesde.scope}/{dependentPackage.config.name}` - )}", ` - .. `version = "{dependentPackage.config.version or rootConfig.defaults.version}" }` - ) - - linkerFiles[dependency] = generateLinkerFile(dependentPackage, `./$TARGET_PACKAGES/{dependency}`) - end - end - - local dependenciesFooter = table.concat(dependencies, "\n") - - local licenseToCopy = packageLicensePath(package) - - for subtarget in targets do - local distPackagePath = path(distPesdePath, subtarget, package.config.name) - fs.writeDir(distPackagePath) - - local src = path(distPackagePath, "src") - fs.writeDir(src) - copyPackageDir(package, src) - - baseManifest = table.clone(baseManifest) - baseManifest.target.environment = subtarget :: any - - for fileName, source in linkerFiles do - local linkerFile = `{fileName}.luau` - table.insert(baseManifest.includes, linkerFile) - table.insert(baseManifest.target.build_files, linkerFile) - fs.writeFile( - path(distPackagePath, linkerFile), - (string.gsub(source, "$TARGET_PACKAGES", `{subtarget}_packages`)) - ) - end - - local manifest = serde.encode("toml", baseManifest, true) - manifest ..= dependenciesFooter - manifest ..= "\n" - - if subtarget == "roblox" then - -- why is pesde so overcomplicated - manifest ..= SYBAU_PESDE - fs.copy(path(process.cwd, ".lune", "pesde-scripts"), path(distPackagePath, ".pesde", "scripts")) - end - - fs.writeFile(path(distPackagePath, "pesde.toml"), manifest) - - fs.copy(licenseToCopy, path(distPackagePath, "LICENSE.md")) - end - end -end - --- Wally - -local packageForWally -do - type WallyManifest = { - package: { - name: string, - description: string, - version: string, - license: string, - authors: { string }, - realm: "shared" | "server", - registry: string, - homepage: string, - repository: string, - private: boolean, - dependencies: { [string]: string }, - }, - } - - function packageForWally(package: types.Package) - local distPackagePath = path(distWallyPath, package.config.name) - fs.writeDir(distPackagePath) - - local manifest: WallyManifest = { - package = { - name = `{rootConfig.publishers.wally.scope}/{package.config.name}`, - description = package.config.description, - version = package.config.version or rootConfig.defaults.version, - license = package.config.license or rootConfig.defaults.license, - authors = package.config.authors or rootConfig.defaults.authors, - realm = "shared", - registry = rootConfig.publishers.wally.registry, - homepage = rootConfig.homepage, - repository = rootConfig.repository, - private = false, - dependencies = {}, - }, - } - - if package.config.dependencies then - for dependency in package.config.dependencies do - local dependentPackage = nameToPackage[dependency] - - -- I love stylua - manifest.package.dependencies[dependency] = - `{rootConfig.publishers.wally.scope}/{dependentPackage.config.name}@{dependentPackage.config.version or rootConfig.defaults.version}` - - fs.writeFile( - path(distPackagePath, `{dependency}.luau`), - generateLinkerFile(dependentPackage, `./Packages/{dependency}`) - ) - end - end - - local src = path(distPackagePath, "src") - fs.writeDir(src) - copyPackageDir(package, src) - - fs.copy(packageLicensePath(package), path(distPackagePath, "LICENSE.md")) - fs.writeFile(path(distPackagePath, "Wally.toml"), serde.encode("toml", manifest, true)) - end -end - --- NPM - -local packageForNpm -do - type NpmManifest = { - name: string, - version: string, - description: string, - main: string, - types: string, - files: { string }, - author: string, - repository: { - type: "git", - url: string, - }, - bugs: { - url: string, - }, - dependencies: { [string]: string }, - } - - local function copyPackageDir(package: types.Package, destinationDir: string) - for _, file in fs.readDir(package.absolutePath) do - if file:match("%.luau$") and file ~= "prvd.config.luau" then - fs.copy(path(package.absolutePath, file), path(destinationDir, file)) - elseif file:match("%.ts$") then - -- fixing import paths - local contents = fs.readFile(path(package.absolutePath, file)) - contents = string.gsub(contents, 'from "%.%./%w+"', function(importPath) - return string.gsub(importPath, "%.%./", `@{rootConfig.publishers.npm.scope}/`) - end) - fs.writeFile(path(destinationDir, file), contents) - end - end - end - - function packageForNpm(package: types.Package) - local distPackagePath = path(distNpmPath, package.config.name) - fs.writeDir(distPackagePath) - - local manifest: NpmManifest = { - name = `@{rootConfig.publishers.npm.scope}/{package.config.name}`, - version = package.config.version or rootConfig.defaults.version, - description = package.config.description, - main = "src/init.luau", - types = "src/init.luau", - files = { - "src", - "LICENSE.md", - "package.json", - }, - author = (package.config.authors or rootConfig.defaults.authors)[1], - repository = { - type = "git", - url = `git+{rootConfig.repository}.git`, - }, - bugs = { - url = `{rootConfig.repository}/issues`, - }, - dependencies = {}, - } - - if package.config.dependencies then - for dependency in package.config.dependencies do - local dependentPackage = nameToPackage[dependency] - - -- I love stylua - manifest.dependencies[`@{rootConfig.publishers.npm.scope}/{dependentPackage.config.name}`] = dependentPackage.config.version - or rootConfig.defaults.version - - fs.writeFile( - path(distPackagePath, `{dependency}.luau`), - generateLinkerFile(dependentPackage, `./Packages/{dependency}`) - ) - end - end - - local src = path(distPackagePath, "src") - fs.writeDir(src) - copyPackageDir(package, src) - - fs.copy(packageLicensePath(package), path(distPackagePath, "LICENSE.md")) - fs.writeFile(path(distPackagePath, "package.json"), serde.encode("json", manifest, true)) - end -end - -local models: { [types.Package]: string } = {} - -local function buildModel(package: types.Package) - local distTempModelPath = path(distTempPath, "models", package.config.name) - fs.writeDir(distTempModelPath) - local src = path(distTempModelPath, "src") - fs.writeDir(src) - copyPackageDir(package, src) - fs.writeFile( - path(distTempModelPath, "default.project.json"), - serde.encode("json", { - name = package.config.name, - tree = { - ["$path"] = "src", - }, - }, true) - ) - local result = process.exec("rojo", { "build", "-o", "model.rbxm", "default.project.json" }, { - cwd = distTempModelPath, - }) - assert(result.ok, result.stderr) - local modelPath = path(distModelPath, `{package.config.name}.rbxm`) - fs.move(path(distTempModelPath, "model.rbxm"), modelPath) - models[package] = modelPath - fs.removeDir(distTempModelPath) -end - -for _, name in toBuild do - print("Building package", name) - local package = nameToPackage[name] - - packageForPesde(package) - packageForWally(package) - packageForNpm(package) - - buildModel(package) -end - -fs.removeDir(distTempPath) -print("Building bundle") - -local bundle = roblox.Instance.new("Folder") -bundle.Name = "prvdmwrong" - -for _, modelPath in models do - for _, instance in roblox.deserializeModel(fs.readFile(modelPath)) do - instance.Parent = bundle - end -end - -fs.writeFile(distBundlePath, roblox.serializeModel({ bundle })) - -local game = roblox.Instance.new("DataModel") -bundle.Parent = game:GetService("ReplicatedStorage") - -fs.writeFile(distBundlePlacePath, roblox.serializePlace(game)) diff --git a/.lune/lib/configure.luau b/.lune/lib/configure.luau deleted file mode 100644 index 7d84c8ff..00000000 --- a/.lune/lib/configure.luau +++ /dev/null @@ -1,81 +0,0 @@ --- Repository - -export type RootPublisher = { - scope: string, - registry: string, -} - -local function publisher(x: RootPublisher) - return table.freeze(x) -end - -export type RepoConfig = { - repository: string, - homepage: string, - packageDir: string, - defaults: { - authors: { string }, - license: string, - version: string, - }, - publishers: { - pesde: RootPublisher, - wally: RootPublisher, - npm: RootPublisher, - } -} - -local function root(x: RepoConfig) - return table.freeze(x) -end - --- Packages - -export type PackageName = - | "prvdmwrong" - | "runtime" - | "logger" - | "dependencies" - | "providers" - | "lifecycles" - | "roots" - | "rbx-components" - | "rbx-lifecycles" - -export type PackageTarget = "roblox" - -export type PackageDependencies = { [PackageName]: true? } - -local function dependencies(x: PackageDependencies) - return table.freeze(x) -end - -export type PackageConfig = { - name: string, - description: string, - - authors: { string }?, - license: string?, - version: string?, - - pesdeTargets: { [PesdeEnvironment]: true }?, - - dependencies: PackageDependencies?, - - types: { [string]: boolean | string }?, - - unreleased: boolean? -} - -local function package(x: PackageConfig) - return table.freeze(x) -end - -export type PesdeEnvironment = "roblox" | "roblox_server" | "luau" | "lune" - -return table.freeze({ - root = root, - publisher = publisher, - package = package, - dependencies = dependencies, -}) diff --git a/.lune/lib/root-config.luau b/.lune/lib/root-config.luau deleted file mode 100644 index 8315f3d4..00000000 --- a/.lune/lib/root-config.luau +++ /dev/null @@ -1,2 +0,0 @@ -local rootConfig = require("../../prvd.config") -return rootConfig diff --git a/.lune/lib/tiniest/tiniest.luau b/.lune/lib/tiniest/tiniest.luau deleted file mode 100644 index d509a9f5..00000000 --- a/.lune/lib/tiniest/tiniest.luau +++ /dev/null @@ -1,219 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -local tiniest_plugin = require("./tiniest_plugin") - -type Context = DescribeContext | RunContext - -type DescribeContext = { - type: "describe", - labels: { string }, - add_test: (Test) -> (), -} - -type RunContext = { - type: "run", -} - -export type ErrorReport = { - type: "tiniest.ErrorReport", - message: string, - trace: string, - code: { - snippet: string, - line: string, - }?, -} - -export type Test = { - labels: { string }, - run: () -> (), -} - -export type RunResult = { - tests: { Test }, - status_tally: { - pass: number, - fail: number, - }, - individual: { [Test]: TestRunResult }, -} - -export type TestRunResult = PassTestRunResult | FailTestRunResult - -export type PassTestRunResult = { - status: "pass", -} - -export type FailTestRunResult = { - status: "fail", - error: ErrorReport, -} - -export type Options = { - plugins: nil | { tiniest_plugin.Plugin }, -} - -export type RunOptions = {} - -local function catch_errors(func: any, ...) - local outer_trace - local function handler(message) - local report: ErrorReport - if typeof(message) == "table" and message.type == "tiniest.ErrorReport" then - report = message :: ErrorReport - else - report = { - type = "tiniest.ErrorReport", - message = tostring(message), - trace = debug.traceback(nil, 2), - } - end - local from, to = string.find(report.trace, outer_trace, 1, true) - if from ~= nil and to ~= nil then - report.trace = report.trace:sub(1, from - 1) .. report.trace:sub(to + 1) - end - return report - end - outer_trace = debug.traceback() - return xpcall(func, handler, ...) -end - -local tiniest = {} - -function tiniest.configure(options: Options) - local plugins = tiniest_plugin.configure(options.plugins) - - local get_context, with_root_context, with_inner_context - do - local current_context: Context? = nil - - function get_context(): Context - assert(current_context ~= nil, "This function can only be called from inside of a test suite") - return current_context - end - - function with_root_context(root_context: Context, inner: (Context) -> ()): () - assert(current_context == nil, "This function can't be called from inside of a test suite") - current_context = root_context - local ok, err = catch_errors(inner :: any, root_context) - current_context = nil - if not ok then - -- bro - -- error(err.message, 0) - error(err, 0) - end - end - - function with_inner_context(make_context: (Context) -> Context, inner: (Context) -> ()): () - local outer_context = get_context() - local inner_context = make_context(outer_context) - current_context = inner_context - local ok, err = catch_errors(inner :: any, inner_context) - current_context = outer_context - if not ok then - error(err.message, 0) - end - end - end - - local self = {} - - function self.describe(label: string, inner: () -> ()): () - with_inner_context(function(outer_context: Context): Context - assert(outer_context.type == "describe", "This function can only be called outside of tests") - local context = table.clone(outer_context) - context.labels = table.clone(context.labels) - table.insert(context.labels, label) - return context - end, inner) - end - - function self.test(label: string, run: () -> ()): () - local context = get_context() - assert(context.type == "describe", "This function can only be called outside of tests") - local labels = table.clone(context.labels) - table.insert(labels, label) - local test: Test = { - labels = labels, - run = run, - } - context.add_test(test) - end - - function self.collect_tests(inner: () -> ()): { Test } - local tests = {} - local context: Context = { - type = "describe", - labels = {}, - add_test = function(test) - table.insert(tests, test) - end, - } - with_root_context(context, inner) - return tests - end - - function self.run_tests(tests: { Test }, run_options: RunOptions): RunResult - plugins.notify("before_run", tests, run_options) - - local context: Context = { - type = "run", - } - - local individual = {} - for _, test in tests do - plugins.notify("before_test", test, run_options) - local _, test_run_result = xpcall(function() - with_root_context(context, test.run) - local pass: TestRunResult = { - status = "pass", - } - return pass - end, function(message) - if typeof(message) == "table" and message.type == "tiniest.ErrorReport" then - local fail: TestRunResult = { - status = "fail", - error = message :: ErrorReport, - } - return fail - else - local error: ErrorReport = { - type = "tiniest.ErrorReport", - message = tostring(message), - trace = debug.traceback(), - } - local fail: TestRunResult = { - status = "fail", - error = error, - } - return fail - end - end) - plugins.notify("after_test", test, test_run_result, run_options) - individual[test] = test_run_result - end - - local status_tally = { - pass = 0, - fail = 0, - } - - for _, result in individual do - status_tally[result.status] += 1 - end - - local result: RunResult = { - tests = tests, - status_tally = status_tally, - individual = individual, - } - plugins.notify("after_run", result, run_options) - - return result - end - - return self -end - -return tiniest diff --git a/.lune/lib/tiniest/tiniest_expect.luau b/.lune/lib/tiniest/tiniest_expect.luau deleted file mode 100644 index 623feecb..00000000 --- a/.lune/lib/tiniest/tiniest_expect.luau +++ /dev/null @@ -1,147 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -local tiniest_quote = require("./tiniest_quote") - -local tiniest_expect = {} - -type Context = { - target: unknown, - test: string, - params: { unknown }, -} - -local context: Context = { - target = nil, - test = "", - params = {}, -} - -local function fail(message: string?): never - local quoted = {} - for index, param in context.params do - quoted[index] = tiniest_quote(param) - end - local param_list = table.concat(quoted, ",") - error({ - type = "tiniest.ErrorReport", - message = "Expectation not met" .. if message == nil then "" else `, because:\n{message}`, - trace = debug.traceback(nil, 4), - code = { - snippet = `expect({tiniest_quote(context.target)}).{context.test}({param_list})`, - line = debug.info(4, "l"), - }, - }, 0) -end - -local function check(condition: boolean, cause: string): () - if not condition then - error(`Bad usage of expect().{context.test}()\nCause: {cause}`, 0) - end -end - -local function is_indexable(x: unknown): boolean - return type(x) == "table" or type(x) == "userdata" -end - -function tiniest_expect.expect(a: any) - local tests = {} - - function tests.exists() - return if a ~= nil then tests else fail() - end - - function tests.never_exists() - return if a == nil then tests else fail() - end - - function tests.is(b: any) - return if a == b then tests else fail() - end - - function tests.never_is(b: any) - return if a ~= b then tests else fail() - end - - function tests.is_true() - check(typeof(a) == "boolean", "expect() value must be boolean") - return if a then tests else fail() - end - - function tests.never_is_true() - check(typeof(a) == "boolean", "expect() value must be boolean") - return if not a then tests else fail() - end - - function tests.is_a(b: string) - return if typeof(a) == b then tests else fail() - end - - function tests.never_is_a(b: string) - return if typeof(a) ~= b then tests else fail() - end - - function tests.has_key(b: any) - check(is_indexable(a), "expect() value must be indexable") - check(b ~= nil, "key cannot be nil") - return if a[b] then tests else fail() - end - - function tests.never_has_key(b: any) - check(is_indexable(a), "expect() value must be indexable") - check(b ~= nil, "key cannot be nil") - return if not a[b] then tests else fail(`[{tiniest_quote(b)}] = {tiniest_quote(a[b])}`) - end - - function tests.has_value(b: any) - check(typeof(a) == "table", "expect() value must be table") - check(b ~= nil, "value cannot be nil") - return if table.find(a, b) then tests else fail() - end - - function tests.never_has_value(b: any) - check(typeof(a) == "table", "expect() value must be table") - check(b ~= nil, "value cannot be nil") - local index = table.find(a, b) - return if index == nil then tests else fail(`Found at index {index}`) - end - - function tests.fails() - check(typeof(a) == "function", "expect() value must be function") - local ok = pcall(a) - return if not ok then tests else fail() - end - - function tests.never_fails() - check(typeof(a) == "function", "expect() value must be function") - local ok, err = pcall(a) - return if ok then tests else fail(`Failed with {tiniest_quote(err)}`) - end - - function tests.fails_with(b: string) - check(typeof(a) == "function", "expect() value must be function") - local ok, err = pcall(a) - return if not ok and err:lower():match(b:lower()) - then tests - else if ok then fail("Did not fail") else fail(`Failed with {tiniest_quote(err)}`) - end - - function tests.never_fails_with(b: string) - check(typeof(a) == "function", "expect() value must be function") - local ok, err = pcall(a) - return if ok or not err:lower():match(b:lower()) then tests else fail() - end - - for name: any, body: any in tests do - tests[name] = function(...) - context.target = a - context.test = name - context.params = { ... } - return body(...) - end - end - - return tests -end - -return tiniest_expect diff --git a/.lune/lib/tiniest/tiniest_for_lune.luau b/.lune/lib/tiniest/tiniest_for_lune.luau deleted file mode 100644 index 89dc2838..00000000 --- a/.lune/lib/tiniest/tiniest_for_lune.luau +++ /dev/null @@ -1,114 +0,0 @@ --- From dphfox/tiniest, licensed under BSD3 ---!strict - -local tiniest = require("./tiniest") -local tiniest_expect = require("./tiniest_expect") -local tiniest_pretty = require("./tiniest_pretty") -local tiniest_snapshot = require("./tiniest_snapshot") -local tiniest_time = require("./tiniest_time") - -local fs = require("@lune/fs") -local luau = require("@lune/luau") - -export type Options = { - snapshot_path: string?, - save_snapshots: boolean?, - pretty: nil | { - disable_colour: boolean?, - disable_emoji: boolean?, - disable_unicode: boolean?, - disable_output: nil | { - after_run: boolean?, - }, - }, -} - -local tiniest_for_lune = {} - -function tiniest_for_lune.configure(options: Options) - local self = {} - - local function get_path_to_snapshot(key: string): string - assert(options.snapshot_path ~= nil) - return `{options.snapshot_path}/{key}.snap.luau` - end - - local function load_snapshots(key: string): { string }? - local path = get_path_to_snapshot(key) - if not fs.isFile(path) then - return nil - else - local ok, result = pcall(function() - local source = fs.readFile(path) - local bytecode = luau.compile(source) - local loaded = luau.load(bytecode, { - injectGlobals = false, - }) - return loaded() - end) - if ok then - return result - else - error("[tiniest_for_lune] Failed to load snapshots from disk: " .. tostring(result), 0) - end - end - end - - local function save_snapshots(key: string, snapshots: { string }): () - local ok, result = pcall(function() - snapshots = table.clone(snapshots) - for index, snapshot in snapshots do - snapshots[index] = `[====[{snapshot}]====]` - end - fs.writeFile( - get_path_to_snapshot(key), - "-- Auto-generated by dphfox/tiniest. Do not modify!\n" - .. "--!nocheck\n" - .. "return {" - .. table.concat(snapshots, ", ") - .. "}" - ) - end) - if not ok then - error("[tiniest_for_lune] Failed to save snapshots to disk: " .. tostring(result), 0) - end - end - - self.expect = tiniest_expect.expect - - local tiniest_time = tiniest_time.configure({ - get_timestamp = os.clock, - }) - - local tiniest_snapshot = tiniest_snapshot.configure({ - load_snapshots = if options.snapshot_path then load_snapshots else nil, - save_snapshots = if options.save_snapshots then save_snapshots else nil, - }) - self.snapshot = tiniest_snapshot.snapshot - - local tiniest_pretty = tiniest_pretty.configure({ - disable_colour = options.pretty and options.pretty.disable_colour, - disable_emoji = options.pretty and options.pretty.disable_emoji, - disable_unicode = options.pretty and options.pretty.disable_unicode, - disable_output = options.pretty and options.pretty.disable_output, - plugins = { tiniest_time :: any, tiniest_snapshot }, - }) - self.format_run = tiniest_pretty.format_run - - local tiniest = tiniest.configure({ - plugins = { tiniest_time :: any, tiniest_snapshot, tiniest_pretty }, - }) - self.describe = tiniest.describe - self.test = tiniest.test - self.collect_tests = tiniest.collect_tests - self.run_tests = tiniest.run_tests - - return self -end - --- bro -export type Configured = typeof(tiniest.configure({})) & { - expect: typeof(tiniest_expect.expect), -} - -return tiniest_for_lune diff --git a/.lune/lib/tiniest/tiniest_plugin.luau b/.lune/lib/tiniest/tiniest_plugin.luau deleted file mode 100644 index f4c6ebe9..00000000 --- a/.lune/lib/tiniest/tiniest_plugin.luau +++ /dev/null @@ -1,36 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -export type Plugin = { - is_tiniest_plugin: true, -} - -local tiniest_plugin = {} - -function tiniest_plugin.configure(plugins: { any }?) - if plugins ~= nil then - for index, plugin in plugins do - if not plugin.is_tiniest_plugin then - error(`sanity check: plugin #{index} is not a valid plugin`) - end - end - end - - local self = {} - - function self.notify(method_name: string, ...): () - if plugins == nil then - return - end - for _, plugin in plugins do - local method = plugin[method_name] - if typeof(method) == "function" then - method(...) - end - end - end - - return self -end - -return tiniest_plugin diff --git a/.lune/lib/tiniest/tiniest_pretty.luau b/.lune/lib/tiniest/tiniest_pretty.luau deleted file mode 100644 index 2654e979..00000000 --- a/.lune/lib/tiniest/tiniest_pretty.luau +++ /dev/null @@ -1,228 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -local tiniest = require("./tiniest") -local tiniest_plugin = require("./tiniest_plugin") -type Test = tiniest.Test -type TestRunResult = tiniest.TestRunResult -type RunResult = tiniest.RunResult - -export type Options = { - plugins: nil | { tiniest_plugin.Plugin }, - disable_emoji: boolean?, - disable_unicode: boolean?, - disable_colour: boolean?, - disable_output: nil | { - after_run: boolean?, - }, -} - -local tiniest_pretty = {} - -function tiniest_pretty.configure(options: Options) - if options.disable_unicode then - options.disable_emoji = true - end - - local plugins = tiniest_plugin.configure(options.plugins) - - local function string_len(text: string) - if options.disable_unicode then - return string.len(text) - else - return utf8.len(text) or string.len(text) - end - end - local status_icons = { - pass = if options.disable_emoji then "[PASS]" else "✅", - fail = if options.disable_emoji then "[FAIL]" else "❌", - } - local crumb_trail = if options.disable_unicode then " > " else " ▸ " - local divider = if options.disable_unicode then "=" else "═" - local margin_line = if options.disable_unicode then "|" else "│" - - local paint = {} - do - local function ansi_mode(...) - if options.disable_colour then - return "" - else - return `{string.char(27)}[{table.concat({ ... }, ";")}m` - end - end - local DIM = ansi_mode("2") - local PASS = ansi_mode("1", "32") - local PASS_DIM = ansi_mode("2", "32") - local FAIL = ansi_mode("1", "31") - local FAIL_DIM = ansi_mode("2", "31") - local TRACE = ansi_mode("1", "34") - local TRACE_DIM = ansi_mode("2", "34") - local NUMBER = ansi_mode("1", "36") - local STRING = ansi_mode("1", "33") - local KEYWORD = ansi_mode("1", "35") - local RESET = ansi_mode("0") - - function paint.dim(text: string): string - return DIM .. text .. RESET - end - - function paint.pass(text: string): string - return PASS .. text .. RESET - end - - function paint.pass_dim(text: string): string - return PASS_DIM .. text .. RESET - end - - function paint.fail(text: string): string - return FAIL .. text .. RESET - end - - function paint.fail_dim(text: string): string - return FAIL_DIM .. text .. RESET - end - - function paint.trace(text: string): string - return TRACE .. text .. RESET - end - - function paint.trace_dim(text: string): string - return TRACE_DIM .. text .. RESET - end - - function paint.number(text: string): string - return NUMBER .. text .. RESET - end - - function paint.string(text: string): string - return STRING .. text .. RESET - end - - function paint.keyword(text: string): string - return KEYWORD .. text .. RESET - end - end - - local LINE_LENGTH = 80 - local full_width_divider = paint.dim(string.rep(divider, LINE_LENGTH)) - local function title(text: string): string - local no_ansi = text:gsub(`{string.char(27)}.-m`, "") - local divider_count = (LINE_LENGTH - string_len(no_ansi) - 2) / 2 - local divider_lhs = string.rep(divider, math.ceil(divider_count)) - local divider_rhs = string.rep(divider, math.floor(divider_count)) - return paint.dim(divider_lhs) .. " " .. text .. " " .. paint.dim(divider_rhs) - end - local function syntax(snippet: string): string - return snippet - :gsub("0?[xXbB]?%d*%.?%d*[eE]?%-?%d+", paint.number) - :gsub('".-"', paint.string) - :gsub("'.-'", paint.string) - :gsub("function", paint.keyword) - :gsub("end", paint.keyword) - :gsub("true", paint.keyword) - :gsub("false", paint.keyword) - :gsub("nil", paint.keyword) - :gsub("%-%-.-\n", paint.dim) - end - local function indent(passage: string, indentation: string): string - return passage:gsub("\n", "\n" .. indentation) - end - - local self = {} - self.is_tiniest_plugin = true - - function self.format_run(run_result: RunResult): string - local lines = {} - - local pretty_results = {} - for _, test in run_result.tests do - local result = run_result.individual[test] - local painted_labels = table.clone(test.labels) - for index, label in painted_labels do - local style = result.status .. if index < #painted_labels then "_dim" else "" - painted_labels[index] = paint[style](label) - end - local annotations = "" - local function add_annotation(annotation: string): () - annotations ..= ` - {annotation}` - end - plugins.notify("add_annotations", result, options, add_annotation) - local pretty = { - test = test, - result = result, - crumbs = table.concat(painted_labels, paint[result.status .. "_dim"](crumb_trail)), - icon = status_icons[result.status], - annotations = paint.dim(annotations), - } - table.insert(pretty_results, pretty) - end - - if run_result.status_tally.fail > 0 then - table.insert(lines, title(`Errors from {run_result.status_tally.fail} test(s)`)) - table.insert(lines, "") - for _, pretty in pretty_results do - if pretty.result.status == "pass" then - continue - end - table.insert(lines, `{pretty.icon} {pretty.crumbs}`) - table.insert(lines, paint.trace(pretty.result.error.message)) - local code = pretty.result.error.code - if code ~= nil then - local num_length = string_len(code.line) - local empty_margin = string.rep(" ", num_length + 1) .. paint.dim(margin_line) .. " " - table.insert(lines, empty_margin) - table.insert( - lines, - `{paint.dim(`{code.line} {margin_line}`)} {indent(syntax(code.snippet), empty_margin)}` - ) - table.insert(lines, empty_margin) - end - local trace = pretty.result.error.trace:gsub("\n+$", "") - table.insert(lines, paint.trace_dim(trace)) - table.insert(lines, "") - end - end - - local line_items = {} - local function add_line_items(key: string, value: string): () - table.insert(line_items, `{paint.dim(key .. ":")} {value}`) - end - plugins.notify("add_line_items", run_result, options, add_line_items) - - table.insert(lines, title(`Status of {#pretty_results} test(s)`)) - table.insert(lines, "") - for _, pretty in pretty_results do - table.insert(lines, `{pretty.icon} {pretty.crumbs}{pretty.annotations}`) - end - table.insert(lines, "") - table.insert( - lines, - title( - `{paint.pass(`{run_result.status_tally.pass} passed`)}, {paint.fail( - `{run_result.status_tally.fail} failed` - )}` - ) - ) - if #line_items > 0 then - table.insert(lines, "") - for _, line_item in line_items do - table.insert(lines, line_item) - end - table.insert(lines, "") - table.insert(lines, full_width_divider) - end - - return table.concat(lines, "\n") - end - - function self.after_run(run_result: RunResult, _): () - if options.disable_output and options.disable_output.after_run then - return - end - print(self.format_run(run_result)) - end - - return self -end - -return tiniest_pretty diff --git a/.lune/lib/tiniest/tiniest_quote.luau b/.lune/lib/tiniest/tiniest_quote.luau deleted file mode 100644 index c2310337..00000000 --- a/.lune/lib/tiniest/tiniest_quote.luau +++ /dev/null @@ -1,40 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -local function tiniest_quote(x: unknown, given_indent_amount: number?): string - if type(x) == "nil" or type(x) == "number" or type(x) == "boolean" or type(x) == "userdata" then - return tostring(x) - elseif type(x) == "string" then - return string.format("%q", x) - elseif type(x) == "function" then - return "function() ... end" - elseif type(x) == "table" then - local outer_indent_amount = given_indent_amount or 0 - local inner_indent_amount = outer_indent_amount + 1 - local outer_indent = string.rep(" ", outer_indent_amount) - local inner_indent = string.rep(" ", inner_indent_amount) - - local tbl: {} = x :: any - local sorted_pairs = {} - for key, value in tbl do - table.insert(sorted_pairs, { - key = tiniest_quote(key, inner_indent_amount), - value = tiniest_quote(value, inner_indent_amount), - }) - end - table.sort(sorted_pairs, function(a, b) - return a.key < b.key - end) - local frozen = table.isfrozen(tbl) - local lines = { if frozen then "table.freeze {" else "{" } - for _, pair in sorted_pairs do - table.insert(lines, `{inner_indent}[{pair.key}] = {pair.value};`) - end - table.insert(lines, outer_indent .. "}") - return table.concat(lines, "\n") - else - return `{type(x)}({tostring(x)})` - end -end - -return tiniest_quote :: (unknown) -> string diff --git a/.lune/lib/tiniest/tiniest_snapshot.luau b/.lune/lib/tiniest/tiniest_snapshot.luau deleted file mode 100644 index eba9de3e..00000000 --- a/.lune/lib/tiniest/tiniest_snapshot.luau +++ /dev/null @@ -1,159 +0,0 @@ --- From dphfox/tiniest, licensed under BSD3 ---!strict - -local tiniest = require("./tiniest") -local tiniest_quote = require("./tiniest_quote") -type Test = tiniest.Test - -export type TestRunResult = tiniest.TestRunResult & { - num_snapshots_updated: number, - num_snapshots_obsolete: number, -} -export type RunResult = tiniest.RunResult & { - num_snapshots_updated: number, - num_snapshots_obsolete: number, -} - -export type Options = { - save_snapshots: nil | (key: string, values: { string }) -> (), - load_snapshots: nil | (key: string) -> { string }?, -} - -type TestContext = { - key: string, - snapshots: { string }, - next_snapshot_index: number, - num_updated: number, -} - -type RunContext = { - num_updated: number, - num_obsolete: number, -} - -local tiniest_snapshot = {} - -function tiniest_snapshot.configure(options: Options) - local self = {} - self.is_tiniest_plugin = true - - local function get_test_key(test: Test) - local labels = {} - for _, label in test.labels do - label = label:lower():gsub("[^%w%s]", ""):gsub(" ", "_") - table.insert(labels, label) - end - return table.concat(labels, ".") - end - - local run_context: RunContext? - local test_context: TestContext? - - function self.snapshot(x: unknown): () - if options.load_snapshots == nil then - error("snapshot() is unavailable - snapshots have not been configured", 0) - elseif run_context == nil or test_context == nil then - error("snapshot() can only be used while a test is running with tiniest_snapshot", 0) - end - - local snapshot_index = test_context.next_snapshot_index - test_context.next_snapshot_index += 1 - - local fresh_snapshot = tiniest_quote(x) - local snapshot_on_disk = test_context.snapshots[snapshot_index] - test_context.snapshots[snapshot_index] = fresh_snapshot - - if fresh_snapshot == snapshot_on_disk then - return - end - - if options.save_snapshots then - run_context.num_updated += 1 - test_context.num_updated += 1 - test_context.snapshots[snapshot_index] = fresh_snapshot - elseif snapshot_on_disk == nil then - error({ - type = "tiniest.ErrorReport", - message = "New snapshot() call needs to be saved.\nRun while saving snapshots to save it to disk.", - trace = debug.traceback(nil, 2), - code = { - snippet = `snapshot({fresh_snapshot})`, - line = debug.info(2, "l"), - }, - }, 0) - else - error({ - type = "tiniest.ErrorReport", - message = "Snapshot does not match", - trace = debug.traceback(nil, 2), - code = { - snippet = `snapshot({fresh_snapshot})\n\n-- snapshot on disk:\nsnapshot({snapshot_on_disk})`, - line = debug.info(2, "l"), - }, - }, 0) - end - end - - function self.before_run(_, _): () - run_context = { - num_updated = 0, - num_obsolete = 0, - } - end - - function self.after_run(original_run_result: tiniest.RunResult, _): () - assert(run_context ~= nil) - local run_result = original_run_result :: RunResult - run_result.num_snapshots_updated = run_context.num_updated - run_result.num_snapshots_obsolete = run_context.num_obsolete - run_context = nil - end - - function self.before_test(test: Test, _): () - assert(run_context ~= nil) - local key = get_test_key(test) - test_context = { - key = key, - snapshots = options.load_snapshots and options.load_snapshots(key) or {}, - next_snapshot_index = 1, - num_updated = 0, - } - end - - function self.after_test(_, original_run_result: tiniest.TestRunResult, _): () - assert(run_context ~= nil) - assert(test_context ~= nil) - local run_result = original_run_result :: TestRunResult - run_result.num_snapshots_updated = test_context.num_updated - run_result.num_snapshots_obsolete = test_context.next_snapshot_index - #test_context.snapshots - 1 - run_context.num_obsolete += run_result.num_snapshots_obsolete - if test_context.num_updated > 0 and options.save_snapshots ~= nil then - options.save_snapshots(test_context.key, test_context.snapshots) - end - test_context = nil - end - - function self.add_annotations(original_run_result: tiniest.TestRunResult, _, add_annotation: (string) -> ()) - local run_result = original_run_result :: TestRunResult - if run_result.num_snapshots_updated > 0 then - add_annotation(`{run_result.num_snapshots_updated} snapshot(s) updated`) - end - if run_result.num_snapshots_obsolete > 0 then - add_annotation(`{run_result.num_snapshots_obsolete} snapshot(s) obsolete`) - end - end - - function self.add_line_items(original_run_result: tiniest.RunResult, _, add_line_item: (string, string) -> ()) - local run_result = original_run_result :: RunResult - if run_result.num_snapshots_updated > 0 then - add_line_item("Updated snapshots", tostring(run_result.num_snapshots_updated)) - end - if run_result.num_snapshots_obsolete > 0 then - add_line_item("Obsolete snapshots", tostring(run_result.num_snapshots_obsolete)) - end - end - - return self -end - -return tiniest_snapshot diff --git a/.lune/lib/tiniest/tiniest_time.luau b/.lune/lib/tiniest/tiniest_time.luau deleted file mode 100644 index 48adf1c4..00000000 --- a/.lune/lib/tiniest/tiniest_time.luau +++ /dev/null @@ -1,86 +0,0 @@ --- From dphfox/tiniest, licenced under BSD ---!strict - -local tiniest = require("./tiniest") -local tiniest_pretty = require("./tiniest_pretty") -type Test = tiniest.Test - -export type TestRunResult = tiniest.TestRunResult & { - duration: number, -} -export type RunResult = tiniest.RunResult & { - duration: number, -} - -export type Options = { - get_timestamp: () -> number, -} - -local tiniest_time = {} - -local function format_duration(seconds: number, options: tiniest_pretty.Options): string - local SECOND = 1 - local MILLISECOND = SECOND / 1000 - local MICROSECOND = MILLISECOND / 1000 - local suffix = { - micro = if options.disable_unicode then "u" else "µ", - milli = "m", - } - - if seconds < 100 * MICROSECOND then - return `{math.ceil(seconds / MICROSECOND * 100) / 100}{suffix.micro}s` - elseif seconds < 100 * MILLISECOND then - return `{math.ceil(seconds / MILLISECOND * 100) / 100}{suffix.milli}s` - else - return `{math.ceil(seconds * 100) / 100}s` - end -end - -function tiniest_time.configure(options: Options) - local self = {} - self.is_tiniest_plugin = true - - local start_times = {} - - function self.before_run(tests: { Test }, _): () - start_times[tests] = options.get_timestamp() - end - - function self.after_run(original_run_result: tiniest.RunResult, _): () - local run_result = original_run_result :: RunResult - run_result.duration = options.get_timestamp() - start_times[run_result.tests] - start_times[run_result.tests] = nil - end - - function self.before_test(test: Test, _): () - start_times[test] = options.get_timestamp() - end - - function self.after_test(test: Test, original_run_result: tiniest.TestRunResult, _): () - local run_result = original_run_result :: TestRunResult - run_result.duration = options.get_timestamp() - start_times[test] - start_times[test] = nil - end - - function self.add_annotations( - original_run_result: tiniest.TestRunResult, - options: tiniest_pretty.Options, - add_annotation: (string) -> () - ) - local run_result = original_run_result :: TestRunResult - add_annotation(format_duration(run_result.duration, options)) - end - - function self.add_line_items( - original_run_result: tiniest.RunResult, - options: tiniest_pretty.Options, - add_line_item: (string, string) -> () - ) - local run_result = original_run_result :: RunResult - add_line_item("Time to run", format_duration(run_result.duration, options)) - end - - return self -end - -return tiniest_time diff --git a/.lune/lib/types.luau b/.lune/lib/types.luau deleted file mode 100644 index ade017aa..00000000 --- a/.lune/lib/types.luau +++ /dev/null @@ -1,17 +0,0 @@ -local configure = require("@lune-lib/configure") - -export type PackageContext = { - rootDir: string, - outDir: string, - outWorkDir: string, - packagesDir: string, - packages: { [string]: Package }, -} - -export type Package = { - absolutePath: string, - relativePath: string, - config: configure.PackageConfig, -} - -return nil diff --git a/.lune/lib/utils/collect-packages.luau b/.lune/lib/utils/collect-packages.luau deleted file mode 100644 index dd9931f4..00000000 --- a/.lune/lib/utils/collect-packages.luau +++ /dev/null @@ -1,37 +0,0 @@ -local configure = require("@lune-lib/configure") -local fs = require("@lune/fs") -local path = require("@lune-lib/utils/path") -local types = require("@lune-lib/types") - -local function collectPackages(rootPath: string, packageDir: string) - local packages: { types.Package } = {} - local packageDirPath = path(rootPath, packageDir) - local knownNames = {} - - for _, package in fs.readDir(packageDirPath) do - local packagePath = path(packageDirPath, package) - if fs.isDir(packagePath) then - local packageRelativePath = path(packageDir, package) - local configRequirePath = path(packageRelativePath, "prvd.config") - local configPath = path(packagePath, "prvd.config.luau") - - if fs.isFile(configPath) then - -- HACK: lune i beg you to have a cwd parameter for requires - local config: configure.PackageConfig = (require)(`@lune-lib/../../{configRequirePath}`) - - assert(not knownNames[config.name], `Duplicate package name found: {config.name}`) - knownNames[config.name] = true - - table.insert(packages, { - absolutePath = packagePath, - relativePath = packageRelativePath, - config = config, - }) - end - end - end - - return packages -end - -return collectPackages diff --git a/.lune/lib/utils/path.luau b/.lune/lib/utils/path.luau deleted file mode 100644 index 34b1fed4..00000000 --- a/.lune/lib/utils/path.luau +++ /dev/null @@ -1,9 +0,0 @@ -local process = require("@lune/process") - -local delimiter = if process.os == "windows" then "\\" else "/" - -local function path(...: string) - return table.concat({ ... }, delimiter) -end - -return path diff --git a/.lune/lib/utils/print-divider.luau b/.lune/lib/utils/print-divider.luau deleted file mode 100644 index ffc3f8c8..00000000 --- a/.lune/lib/utils/print-divider.luau +++ /dev/null @@ -1,14 +0,0 @@ -local styles = require("./styles") - -local LINE_COUNT = 80 - -local bold = styles.bold -local dim = styles.dim - -local function printDivider(str: string, lineCount: number?) - local dashRepeats = ((lineCount or LINE_COUNT) - str:len()) * 0.5 - local extraIfUneven = if str:len() % 2 ~= 0 then 1 else 0 - return print(bold(`{dim(string.rep("=", dashRepeats))} {str} {dim(string.rep("=", dashRepeats + extraIfUneven))}`)) -end - -return printDivider diff --git a/.lune/lib/utils/select-packages.luau b/.lune/lib/utils/select-packages.luau deleted file mode 100644 index 98c14574..00000000 --- a/.lune/lib/utils/select-packages.luau +++ /dev/null @@ -1,42 +0,0 @@ -local process = require("@lune/process") -local stdio = require("@lune/stdio") -local types = require("@lune-lib/types") - -local function selectPackages(packages: { types.Package }): { - names: { string }, - nameToPackage: { [string]: types.Package }, - selected: { string }, -} - local packageNames = {} - local nameToPackage = {} - - local selected: { string } = {} - - table.sort(packages, function(lhs, rhs) - return lhs.config.name < rhs.config.name - end) - - for _, package in packages do - local name = package.config.name - table.insert(packageNames, name) - nameToPackage[name] = package - end - - if #process.args == 0 then - for _, index in stdio.prompt("multiselect", "Which packages to build?", packageNames) do - table.insert(selected, packageNames[index]) - end - elseif table.find(process.args, "all") then - selected = table.clone(packageNames) - else - table.move(process.args, 1, #process.args, 1, selected) - end - - return { - names = packageNames, - nameToPackage = nameToPackage, - selected = selected, - } -end - -return selectPackages diff --git a/.lune/lib/utils/styles.luau b/.lune/lib/utils/styles.luau deleted file mode 100644 index 7a30dfa9..00000000 --- a/.lune/lib/utils/styles.luau +++ /dev/null @@ -1,40 +0,0 @@ -local stdio = require("@lune/stdio") - -local RESET_STYLE = stdio.style("reset") -local RESET_COLOR = stdio.color("reset") - -local function wrapStyle(style: stdio.Style) - local code = stdio.style(style) - return function(str: string) - return code .. str .. RESET_STYLE - end -end - -local function wrapColor(color: stdio.Color) - local code = stdio.color(color) - return function(str: string) - return code .. str .. RESET_COLOR - end -end - -local function wrapCode(code: string) - return function() - stdio.write(code) - end -end - -return table.freeze({ - dim = wrapStyle("dim"), - bold = wrapStyle("bold"), - - red = wrapColor("red"), - yellow = wrapColor("yellow"), - green = wrapColor("green"), - cyan = wrapColor("cyan"), - blue = wrapColor("blue"), - purple = wrapColor("purple"), - black = wrapColor("black"), - white = wrapColor("white"), - - clearLine = wrapCode("\x1b[2K\x1b[2A"), -}) diff --git a/.lune/pesde-scripts/roblox_sync_config_generator.luau b/.lune/pesde-scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/.lune/pesde-scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/.lune/pesde-scripts/sourcemap-generator.luau b/.lune/pesde-scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/.lune/pesde-scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/.lune/publish.luau b/.lune/publish.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/.lune/tiniest.luau b/.lune/tiniest.luau deleted file mode 100644 index 9213bcae..00000000 --- a/.lune/tiniest.luau +++ /dev/null @@ -1,25 +0,0 @@ -local fs = require("@lune/fs") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune").configure({}) - -local tests = tiniest.collect_tests(function() - local function visitDir(path: string, luauPath: string) - for _, entry in fs.readDir(path) do - local fullPath = path .. "/" .. entry - local fullLuauPath = luauPath .. "/" .. entry - if fs.isDir(fullPath) then - visitDir(fullPath, fullLuauPath) - elseif fs.isFile(fullPath) and fullPath:match("%.spec.luau$") ~= nil then - (require)(fullLuauPath)(tiniest) - end - end - end - - for _, package in fs.readDir("packages") do - tiniest.describe(package, function() - visitDir("packages/" .. package, "../packages/" .. package) - end) - end -end) - -tiniest.run_tests(tests, {}) --- print(tiniest.format_run()) diff --git a/.zed/settings.json b/.zed/settings.json deleted file mode 100644 index 89f14320..00000000 --- a/.zed/settings.json +++ /dev/null @@ -1,18 +0,0 @@ -// Folder-specific settings -// -// For a full list of overridable settings, and general information on folder-specific settings, -// see the documentation: https://zed.dev/docs/configuring-zed#settings-files -{ - "lsp": { - "luau-lsp": { - "settings": { - "roblox": { - "enabled": true, - "security_level": "none", - "download_api_documentation": true, - "download_definitions": true - } - } - } - } -} diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 4be745a1..00000000 --- a/README.md +++ /dev/null @@ -1,162 +0,0 @@ -
- - - - Prvd 'M Wrong Logo - -
-
- -## 💥 Luau's Unstoppable Force - -> [!WARNING] -> **Prvd 'M Wrong is unfinished.** Do not use Prvd 'M Wrong for production. - - -Luau has often meant navigating sprawling mazes of dependencies, grappling with -incomplete frameworks, and a challenging development experience. - -No longer. Prvd 'M Wrong is the Luau provider framework, freeing you from -logistical nightmares so you can focus just on your project's logic. - -Use Prvd 'M Wrong to structure your project with providers. Prvd 'M Wrong -delivers type-safe APIs, method lifecycles, and dependency injection. - -Whether you prefer batteries to be included, or want to use your favorite -packages and patterns, Prvd 'M Wrong adapts to your needs. - -Built with fantastic user extensibility, modular composability and runtime -integration, Prvd 'M Wrong can be dropped in for both new projects and existing -frameworks. In particular, Prvd 'M Wrong gleams anywhere Luau runs, from Roblox -to Lune. - -All free from logistical nightmares and without sprawling mazes of bloaty -dependencies. - -Want to prove them wrong? -[Get going with the Prvd 'M Wrong on rails tutorial,][Tutorial] -or [read through the library of example projects.][Examples] - -[Tutorial]: https://prvdmwrong.luau.page/latest/tutorials -[Examples]: https://prvdmwrong.luau.page/latest/examples - -## 🚀 Crash Course - -Assuming a Roblox project, create a "Providers" folder in ServerScriptService. - -Create a new server Script inside ServerScriptService, this is where we will -bootstrap Prvd 'M Wrong. - -First, create and start a root. Roots are starting points for Prvd 'M Wrong: - -```luau --- replace with path to Prvd 'M Wrong! -local prvd = require(...) - -local root = prvd.root() - -- use all descendant module scripts inside our Providers folder - :useModules(script.Parent:WaitForChild("Providers"):GetDescendants()) - -- start! - :start() - --- when the server closes, the root should be finished. -game:BindToClose(function() - root:finish() -end) -``` - -Now, let's create your first provider! Inside your "Providers" folder, create a -ModuleScript called "TimeProvider": - -```luau --- replace with path to Prvd 'M Wrong! -local prvd = require(...) - --- Providers are just defined as tables. -local TimeProvider = {} - --- When starting the root, Prvd 'M Wrong will construct each provider one by --- one. -function TimeProvider.constructor(self: TimeProvider) - self.time = 0 -end - --- `start` will be called after all providers have constructed. `start` also --- runs in it's own thread! -function TimeProvider.start(self: TimeProvider) - while true do - self.time += task.wait() - end -end - --- Prvd 'M Wrong takes advantage of the Luau type solver, so your providers --- enjoy type safety! -export type TimeProvider = typeof(TimeProvider) - --- Export the provider. -return prvd(TimeProvider) -``` - -Prvd 'M Wrong can also resolve your provider's dependencies as so the -dependencies it needs are constructed before the dependent. Create a new -"ServerTimeProvider" ModuleScript: - -```luau --- replace with path to Prvd 'M Wrong! -local prvd = require(...) - -local ServerTimeProvider = {} - --- `dependencies` is a special table that Prvd 'M Wrong will read and collect --- dependencies. -ServerTimeProvider.dependencies = { - -- `depend` tells Prvd 'M Wrong this is a dependency that it should track. - -- It also refines the type to the actual constructed provider! - TimeProvider = prvd.depend(require("./TimeProvider")) -} - --- To use the dependencies, get it as the second argument of the constructor: -function ServerTimeProvider.constructor( - self: ServerTimeProvider, - dependencies: typeof(self.dependencies) -) - -- Need to hold on dependencies for later? Just set it! - self.timeProvider = dependencies.TimeProvider -end - --- Now you can access `TimeProvider` in other methods! -function ServerTimeProvider.start(self: ServerTimeProvider) - while true do - print( - "The server has been alive for", - math.round(self.timeProvider.time), - "seconds!" - ) - end -end - -export type ServerTimeProvider = typeof(ServerTimeProvider) -return prvd(ServerTimeProvider) -``` - -With that, you've written your first Prvd 'M Wrong project, touching on all of -the major Prvd 'M Wrong concepts! - -[In the tutorials][Tutorial], we'll dig deeper into what exactly all of this code -is doing. Feel free to review these code snippets as many times as you need. - -## 🌏 Cultural Impact - -Prvd 'M Wrong has a significant cultural impact following the archival of the -Knit framework. Many packages inspired by Prvd 'M Wrong, which you can use if -you're unsastified, as listed below: - -- [Artwork](https://ratplier.github.io/artwork) -- [Saphhire (archived)](https://github.com/Mark-Marks/sapphire) - -## 📝 License - -Prvd 'M Wrong 0.2 is licensed under the Mozilla Public License 2.0. - -Note that historical versions of Prvd 'M Wrong were licensed under the MIT -License and sometimes the Apache License 2.0. diff --git a/dist/pesde/luau/dependencies/src/depend.luau b/dependencies/depend.luau similarity index 72% rename from dist/pesde/luau/dependencies/src/depend.luau rename to dependencies/depend.luau index 55230b4e..beb8b3c3 100644 --- a/dist/pesde/luau/dependencies/src/depend.luau +++ b/dependencies/depend.luau @@ -1,8 +1,8 @@ -local logger = require("./logger") -local types = require("./types") +local logger = require "./logger" +local types = require "./types" local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) + logger:fatalError { template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" } end local unresolvedMt = { @@ -11,9 +11,7 @@ local unresolvedMt = { __newindex = useBeforeConstructed, } -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end +function unresolvedMt:__tostring() return "UnresolvedDependency" end -- Wtf luau local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( diff --git a/dependencies/init.luau b/dependencies/init.luau new file mode 100644 index 00000000..bcac886a --- /dev/null +++ b/dependencies/init.luau @@ -0,0 +1,12 @@ +local depend = require "@self/depend" +local processDependencies = require "@self/process-dependencies" +local sortByPriority = require "@self/sort-by-priority" +local types = require "@self/types" + +export type Dependency = types.Dependency + +return table.freeze { + depend = depend, + processDependencies = processDependencies, + sortByPriority = sortByPriority, +} diff --git a/dist/pesde/luau/dependencies/src/logger.luau b/dependencies/logger.luau similarity index 81% rename from dist/pesde/luau/dependencies/src/logger.luau rename to dependencies/logger.luau index 22f3b307..bf5652b6 100644 --- a/dist/pesde/luau/dependencies/src/logger.luau +++ b/dependencies/logger.luau @@ -1,6 +1,6 @@ -local logger = require("../logger") +local logger = require "../logger" -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { +return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl "dependencies", { useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", alreadyDestroyed = "Cannot destroy an already destroyed Root.", alreadyFinished = "Root has already finished.", diff --git a/dist/npm/dependencies/src/process-dependencies.luau b/dependencies/process-dependencies.luau similarity index 95% rename from dist/npm/dependencies/src/process-dependencies.luau rename to dependencies/process-dependencies.luau index 20820a35..4a7635af 100644 --- a/dist/npm/dependencies/src/process-dependencies.luau +++ b/dependencies/process-dependencies.luau @@ -1,5 +1,5 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") +local lifecycles = require "../lifecycles" +local types = require "./types" export type ProccessDependencyResult = { sortedDependencies: { types.Dependency }, diff --git a/dist/pesde/luau/dependencies/src/sort-by-priority.luau b/dependencies/sort-by-priority.luau similarity index 69% rename from dist/pesde/luau/dependencies/src/sort-by-priority.luau rename to dependencies/sort-by-priority.luau index 638468ab..5d5592af 100644 --- a/dist/pesde/luau/dependencies/src/sort-by-priority.luau +++ b/dependencies/sort-by-priority.luau @@ -1,10 +1,8 @@ -local types = require("./types") +local types = require "./types" local function sortByPriority(dependencies: { types.Dependency }) table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end + if left.priority ~= right.priority then return (left.priority or 1) < (right.priority or 1) end local leftIndex = table.find(dependencies, left) local rightIndex = table.find(dependencies, right) return leftIndex < rightIndex diff --git a/dist/npm/dependencies/src/types.luau b/dependencies/types.luau similarity index 100% rename from dist/npm/dependencies/src/types.luau rename to dependencies/types.luau diff --git a/dist/bundle.rbxl b/dist/bundle.rbxl deleted file mode 100644 index beb9d623e8815c019abce5a4e6dcca31072bfd22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22500 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 Hs$B73?xy|5 diff --git a/dist/bundle.rbxm b/dist/bundle.rbxm deleted file mode 100644 index dbf8b1b6d0ce065dfd5801d017935f71b43fc126..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22396 zcmYIw2Uwfe_5L|`d`shMAhzK{EMW@)9@xeMFvc;S7_c21+aN&LGFZY$*v2;5d)3Zx z_G-54q}hA#G^0t=jJ8SJBu$evY2)m)S^p!a{r!0!gcjep-@WI&=Y8Mv%^gkl4JUV% zoc@!`%C`U*0QAxC|9;w5baoZfi)sIT<0ppnOrzgL$>D+6C>VgCA6Hc9w6f}RJ(;h! z(1*uozC}NW^~|G_ewQZ)#)e~^{iE@bG_21C#o)U<+E}h|1G)etfBi;L^I=4= zBR}mOE8Ex51_m-)qMx6NGTRpPyCS+RhV*~1C7B#bW%jf!mfn&aNEw;;qKSdw*l5ZI zeA%SeebIC}HX4tmmcU^?9Pdlf$->C!j)84EN0W)onZ1m2fd0((=;!l=naBUzi=r3N z;o;=Y>YcH^>fv}|D3uw5{?S-89m{NKFgdy{nywyBZg$YCk?3eDRvjB1O^)W!%T$^U zCOSIcgU?uXJTaK89vdCb>?l1x5?cy`^k17}qpRUCjRnAPd@$BO-aj0x9!tdrTZycKirp!Z6Bj&@#t_MiEj?W_b!tG5Z53)3v4}lifJ+p zU_tdO$y^CHiT`PJqe%K-rmOqLt4BuT$E{bO^O#v|oyoD${utgsPluEJ z(P8`N4ae+x_9#svnpvS>BvO+N3xZXaRS946BP(`otZ!Lnz0%j>gAGs{Nkkjri@-cP z`16?s?evyd!rn}W)o@fS-5DF*5$~r>b&MsP@E=dGs-Z2_nI0R6Cqq?sY&aFOY1zdr zYc!S~8%+$ubZZL#6_~kT-Ui;90_goYL|hG}!K!=UlAi;^vgGC(U^&p5i4c>4e-35{ z3lTyGJw7p2gz7m^g*P$v{8n%a%3@57S zbDI2}fa4�QTT^n(5Jg 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 diff --git a/dist/models/lifecycles.rbxm b/dist/models/lifecycles.rbxm deleted file mode 100644 index bdb9c7f68372468193fef2b053932944f96b67b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3369 zcmX|E3ve98ng0In>3Qv=S6Z!Jw$MnHfr9EN{C4)C#i#wRFWbwU_;$e z9M@xP{;KZj>Br3f{QkcO1OIT@zpdkw@5Ss^8(;uZs$HeAy^~X`)l2)8iHnTXNLOu# zUoN@Mo5M=+ZfZBhD8>V#wPZS zPvq3r@B<-Th=f1VRNGrP=8~xf3k9!Oc7uwD;sSjCXeIpqF}J$l7c1fM^XhdlJf-N; zs<8jyc*yWv;1;T`RHOM);P%b=-drsRT(6qM>qf=BwWfxpLOGPaT$*?1mgdSI!j~)6 zpf*=^i^&#zr|7CTf5|O2G~s)Jd!$sUx`A74Y(`JbYXweWw(K7{;s%3w=zYHWs(#;b zyiyVBqlFWNQZ;1x795YMhwt_61fEC6_in;SC}0P6#MNUpKGIhxm+g9>h>7abqFZUg z16O%+FUy*W0Qas{n-#s@9rmG!lYT9jb19~NSN7)$W#{rgoy|_5#8X12JF~ef3d^m+ zy3UN9!OUFQEd&|xS8Lu?nZn<%!<|>;T@TLNAo}pX;sYkO``%T}Ira z*a7x^te^6C??r261kAx`sE1uhRW@V5_x3%5=rY)Kn5yKI68;FIh7G1J@l4C;?ugH=^@3Z?0PMJ?DKB4-N-MD%osy zC~aH+gG(asC{|0}kzU*Ky&Xyoc_+PuF1Z3eD~^+W1jUTH?;enKny)wb_q zR2}I29ul3`;$zAf<->)!qw~Zw2to%`i|+tkV2!j+jV&Mv?KIJGVo{DJ=ss;!^U70J zL7U)V1k@pNCo?5jJ0j1(t^?LU`;RM2+~osmzm0!Wa;`Y}yi@R&>|c|a<@E=CiqygL zkZoXZ2tRO^S8S_VI9ztKC9mQJ)%5j{Igr!qe2spdv6bv<(@d|Uj7;Whd_&1|rkT-< z#_TETDEezj4uKNsBJdJ$j*L&U*O9R;*DI>Cfm^Kw-rcBE4$SMoF0%FZDykE+K}`kN zvDZmYipgv)o6WUA9OZNi=mKeZ(UHwHK;FcG?d);oUss}Yu$i|H?cm8#WzqbHx!6Hk z6Iq)m+DH6faFJ)L3o5XSi@smZRu&5Cwdw3Ei^wm`9Yk& zh5g#E(4IaIL%$E*_SfGbc^(Pv0LCkMXITh~zo~UND?7E=EkZucv_yH-*y6dttg!h3 zY|kh!iXd_~7vDlxuk+VPWr%C932X#^iYr_=<{x*HY+a?-d5Q0uFL}jAh&_<~4168# z4P5tjH?92XBsM6sML}D2`2$XLNXQnD-)paA?EAh+N5!JvkXE5_KmAm^4g2dPnm}Kr z_IJNZ!}@v6$vZ#hm6~_d^G|rMF>Zt^Oz6_om$kLF^)zizz8L7Sye`%QV}|x)HlR3v zQt-b+ms*0nhqvOizD0S1phR*=C`QBxZZ@$b*J*<>+=qsCUZ-!SUj;6M^p?`R~~J zN@s5xmyAkPp?V=Gjs}4rjCu3^bWl!rKFQytN@u1w47ggw9iCS}`z;N>ik#hE@I1fj zs7Ys5cbq~uicYEOlqxNeez%x?FX9x+X)C!j40;>dcJOVH?J5$S9_WM6Z&rB=<4Uu4 z^jl`M+m7cWxY?{fP>CfDDieIk)L*c>ot1YrK2Gts<2n1qQ`Ept#ON^OIjeyVMfGtm z{+6_D!uoD3m3hLRwyn~<(}$MqzsG{=g6k=r{+SB-`9if&{u4crUUsVPvBh$sdQU{f z?dt6BD7o_62;Uax#Yo-M8#eARFOVPjwQ9+8vnobB1yyGSdkb3B5`S;P)5RGiGN+*J zN;KyGH71gl$`r;Sl-x?~n47*6=AnqO8_D2E!n^_eS<)x4v{Z7-#dPM8C@oXBeMeP@ zaWc;^bBRaS*YT%Ww_E&4luc9Q9a5$eU5L-HNIzHyS!9-^ImAs?WBe<=~bGQ-OOeVqyecnar)AriAXq^Dz&;FWBh*Vv5(%x_lTXg z_`{YQVAsh{X!^xArSX}a*@=BOj_ldLZ+!30nUS%{;oZB(_s{H^-aR!ov3qo8_t@mr z=-$zNlkaE>$%SN2cIL%|QL)Ug#AFXlEkPJ(I4AiZV*DTLEyqDlUnFLq5ZiI5f;RUyXLGB?#aBo_4fbWm z6bL@6v2zrA(KI%LRAqM|CU>y`+^%VVH1*?j#-3G3@7}iP2i2)I{le&3ivNk&Z`!u0 z#5ceC8l1J|2)O+jY*Z8f2l-L-k;mmIOpYj>Y}WThl((uv!<74@bxb3sgNiW6G&zq^ zN+je#m~;`mN(1T(Ka7RGjUQptifw<2nJ?5?A7^4ZsXfSU8*+L=i24hEGVdH#8OSYo zz4pWH^dQp~xcmqcbe1J%rkOoO$|V}~waKDaD%+pX&NQ->1{|=oAGIa67EzyThIluD z7nuJ2ws;QrT&;C;8CB2DLm5Tn9qY*$VS*}f(rZh$$`A^Pjt zdyoV539Ub&@8t5cklLJPF4t?jV7^H521tECQ((bf(9DIp_!w9hcn$HQy%$5P3`lRPzaH)9pu=x?LtHF&gvEUZ`R`5T74pi+n42U-x; z7Z^UubXA%>){1&q$5~jWSe=Q?Jg||;Ih83M>ac!KVms3t(Vp#9SB{UvXhGz+BviyT zD?5aJM7gfPl~_hoIHUTA5<#f^50O%`hP`$jwa*Nw6gA5tCs{m&2NXXmnainjV&C4W zus(i7wUD-`YYidS9^PN%jp)6gr#sNuq*he@raUnu4VlrsBbSG&9J@?|x%V$fL;nvQ C>AUX$ diff --git a/dist/models/logger.rbxm b/dist/models/logger.rbxm deleted file mode 100644 index 31b211bd07c4fa53bc207c3ccd78606f7a61c906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2126 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 DVxIVi diff --git a/dist/models/prvdmwrong.rbxm b/dist/models/prvdmwrong.rbxm deleted file mode 100644 index 90bb7a713a9ca6d25df80c6009932c83f4aebde8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 961 zcmX|AO>7la6#nk~*|}{gwdJo`IwidN243eqSYUW5PkxHgP)g~eQKRH#I&(rDZ$YSe`rx9X}ZHbldM9Sb)?qLHA44G9Um8Z@#J?>vYnIcLtf_uO;teD{1) zQY^;e()g99{d9x^1kY4`y7K01{oI)HMxV!1h#WF{=kM>ZILc`NrJ*nYldm zr94ownPeECN4vLe^nC zWITvi;v8`#Tgf8HihI2B2oCOXX&Il#QIiF0K|Bd-C(Ql$tRuy06f*f1%pEXYoRUJM z1&|>;*3=QoE_H-Vopi0koVm03bgItcX33epj*LffO|@xY%qyd3SM6;K&-{u_YwDP6 zC7$Q0J!Lb#%*92%0P8+Ry-Cm+9GzD^Hi2KT)$50S0iAm4%an!cN(H9omn?b&mW&Ui7x(8@0|AcxRetp$*|=iBkI!=-)8k z!|kR*;e_BpCMDyKU>?Br#9Q)t7&Do81?Y#cQCDCwo<@HBF6=|F3ivRuu_VOuPVFxv z^%rC2H6>&3v!c3^E%-fBSxDGE0-KB{UIioGCy*ZZzZ&MVO7+2_H1^htU+7NN`N)`YoypqQ#){9^YOXVJ)u@PO z@h5%Q{Y~H6uIP`g%j>k6arJM4JMGkKG}Iu*4HO!s8-~7!ZPh{a-!gCkA5&YhG?RP+ z+JBt&Q5n%?XCr;%Fl>f`wwX?-zxwB diff --git a/dist/models/rbx-components.rbxm b/dist/models/rbx-components.rbxm deleted file mode 100644 index ca27a952af3e29ee1afa92b4677e6418b62d759f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4961 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 L=x9H`vDWo}RN^3& diff --git a/dist/models/rbx-lifecycles.rbxm b/dist/models/rbx-lifecycles.rbxm deleted file mode 100644 index 3f1d199c052dbfe79938ab3f897f2dc0ce7e85fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 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 diff --git a/dist/models/runtime.rbxm b/dist/models/runtime.rbxm deleted file mode 100644 index 6dc1306a2f54ed2b47eb05664b34702dc0e2e534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4655 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 GSoVM2BF{3{r8%j=$wiq3 zC17nJiGU#g08Hg9KpDTp+*C%8zLLs<)Z~oRV2*_4m5C;e@z- Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/dependencies/lifecycles.luau b/dist/npm/dependencies/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/npm/dependencies/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/npm/dependencies/logger.luau b/dist/npm/dependencies/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/npm/dependencies/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/npm/dependencies/package.json b/dist/npm/dependencies/package.json deleted file mode 100644 index 57bd1000..00000000 --- a/dist/npm/dependencies/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/lifecycles": "0.2.0-rc.4", - "@prvdmwrong/logger": "0.2.0-rc.4" - }, - "description": "Dependency resolution logic for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/dependencies", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/dependencies/src/depend.luau b/dist/npm/dependencies/src/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/dist/npm/dependencies/src/depend.luau +++ /dev/null @@ -1,30 +0,0 @@ -local logger = require("./logger") -local types = require("./types") - -local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) -end - -local unresolvedMt = { - __metatable = "This metatable is locked.", - __index = useBeforeConstructed, - __newindex = useBeforeConstructed, -} - -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end - --- Wtf luau -local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( - (nil :: any) :: Dependencies, - ... -)) - -- Return a mock value that will be resolved during dependency resolution. - return setmetatable({ - type = "UnresolvedDependency", - dependency = dependency, - }, unresolvedMt) :: any -end - -return depend diff --git a/dist/npm/dependencies/src/index.d.ts b/dist/npm/dependencies/src/index.d.ts deleted file mode 100644 index 8d992015..00000000 --- a/dist/npm/dependencies/src/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "@prvdmwrong/lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/dist/npm/dependencies/src/init.luau b/dist/npm/dependencies/src/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/dist/npm/dependencies/src/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/dist/npm/dependencies/src/logger.luau b/dist/npm/dependencies/src/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/dist/npm/dependencies/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { - useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/npm/dependencies/src/process-dependencies.spec.luau b/dist/npm/dependencies/src/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/dist/npm/dependencies/src/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/dist/npm/dependencies/src/sort-by-priority.luau b/dist/npm/dependencies/src/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/dist/npm/dependencies/src/sort-by-priority.luau +++ /dev/null @@ -1,14 +0,0 @@ -local types = require("./types") - -local function sortByPriority(dependencies: { types.Dependency }) - table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end - local leftIndex = table.find(dependencies, left) - local rightIndex = table.find(dependencies, right) - return leftIndex < rightIndex - end) -end - -return sortByPriority diff --git a/dist/npm/dependencies/src/sort-by-priority.spec.luau b/dist/npm/dependencies/src/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/dist/npm/dependencies/src/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/dist/npm/lifecycles/LICENSE.md b/dist/npm/lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/lifecycles/logger.luau b/dist/npm/lifecycles/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/npm/lifecycles/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/npm/lifecycles/package.json b/dist/npm/lifecycles/package.json deleted file mode 100644 index c8218ee0..00000000 --- a/dist/npm/lifecycles/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/logger": "0.2.0-rc.4", - "@prvdmwrong/runtime": "0.2.0-rc.4" - }, - "description": "Provider method lifecycles implementation for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/lifecycles", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/lifecycles/runtime.luau b/dist/npm/lifecycles/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/npm/lifecycles/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/npm/lifecycles/src/create.luau b/dist/npm/lifecycles/src/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/dist/npm/lifecycles/src/create.luau +++ /dev/null @@ -1,45 +0,0 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") - -local function create( - method: string, - onFire: (lifecycle: types.Lifecycle, Args...) -> () -): types.Lifecycle - local self: types.Self = { - _isDestroyed = false, - _selfRegistered = {}, - _selfUnregistered = {}, - - type = "Lifecycle", - callbacks = {}, - - fire = onFire, - method = method, - register = register, - unregister = unregister, - clear = clear, - onRegistered = onRegistered, - onUnregistered = onUnregistered, - await = await, - destroy = destroy, - } :: any - - methodToLifecycles[method] = methodToLifecycles[method] or {} - table.insert(methodToLifecycles[method], self) - - for _, onLifecycleConstructed in lifecycleConstructed.callbacks do - onLifecycleConstructed(self :: types.Lifecycle) - end - - return self -end - -return create diff --git a/dist/npm/lifecycles/src/index.d.ts b/dist/npm/lifecycles/src/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/dist/npm/lifecycles/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/dist/npm/lifecycles/src/init.luau b/dist/npm/lifecycles/src/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/dist/npm/lifecycles/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/dist/npm/lifecycles/src/method-to-lifecycles.luau b/dist/npm/lifecycles/src/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/dist/npm/lifecycles/src/method-to-lifecycles.luau +++ /dev/null @@ -1,5 +0,0 @@ -local types = require("./types") - -local methodToLifecycles: { [string]: { types.Lifecycle } } = {} - -return methodToLifecycles diff --git a/dist/npm/logger/LICENSE.md b/dist/npm/logger/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/logger/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/logger/package.json b/dist/npm/logger/package.json deleted file mode 100644 index b9954136..00000000 --- a/dist/npm/logger/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/runtime": "0.2.0-rc.4" - }, - "description": "Logging for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/logger", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/logger/runtime.luau b/dist/npm/logger/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/npm/logger/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/npm/logger/src/allow-web-links.luau b/dist/npm/logger/src/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/dist/npm/logger/src/allow-web-links.luau +++ /dev/null @@ -1,5 +0,0 @@ -local runtime = require("../runtime") - -local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true - -return allowWebLinks diff --git a/dist/npm/logger/src/create.luau b/dist/npm/logger/src/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/dist/npm/logger/src/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/dist/npm/logger/src/format-log.luau b/dist/npm/logger/src/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/dist/npm/logger/src/format-log.luau +++ /dev/null @@ -1,43 +0,0 @@ -local types = require("./types") - -local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string - local formattedTemplate = string.format(log.template, table.unpack(log)) - - local error = log.error - local trace: string? = log.trace - - if error then - trace = error.trace - formattedTemplate = string.gsub(formattedTemplate, "ERROR_MESSAGE", error.message) - end - - local id: string? - - -- TODO: find a better way to do ts while still being ergonomic - for templateKey, template in (self :: any) :: { [string]: string } do - if template == log.template then - id = templateKey - break - end - end - - if id then - formattedTemplate ..= `\nID: {id}` - end - - if errorInfoUrl then - formattedTemplate ..= `\nLearn more: {errorInfoUrl}` - if id then - formattedTemplate ..= `#{string.lower(id)}` - end - end - - if trace then - formattedTemplate ..= `\n---- Stack trace ----\n{trace}` - end - - -- Labels are added from createLogger, so we don't add it here - return string.gsub(formattedTemplate, "\n", "\n ") -end - -return formatLog diff --git a/dist/npm/logger/src/index.d.ts b/dist/npm/logger/src/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/dist/npm/logger/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/dist/npm/logger/src/init.luau b/dist/npm/logger/src/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/dist/npm/logger/src/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/dist/npm/logger/src/parse-error.luau b/dist/npm/logger/src/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/dist/npm/logger/src/parse-error.luau +++ /dev/null @@ -1,12 +0,0 @@ -local types = require("./types") - -local function parseError(err: string): types.Error - return { - type = "Error", - raw = err, - message = err:gsub("^.+:%d+:%s*", ""), - trace = debug.traceback(nil, 2), - } -end - -return parseError diff --git a/dist/npm/providers/LICENSE.md b/dist/npm/providers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/providers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/providers/dependencies.luau b/dist/npm/providers/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/npm/providers/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/npm/providers/lifecycles.luau b/dist/npm/providers/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/npm/providers/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/npm/providers/logger.luau b/dist/npm/providers/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/npm/providers/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/npm/providers/package.json b/dist/npm/providers/package.json deleted file mode 100644 index 37cbe6b4..00000000 --- a/dist/npm/providers/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/dependencies": "0.2.0-rc.4", - "@prvdmwrong/lifecycles": "0.2.0-rc.4", - "@prvdmwrong/logger": "0.2.0-rc.4", - "@prvdmwrong/runtime": "0.2.0-rc.4" - }, - "description": "Provider creation for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/providers", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/providers/runtime.luau b/dist/npm/providers/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/npm/providers/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/npm/providers/src/create.luau b/dist/npm/providers/src/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/dist/npm/providers/src/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/dist/npm/providers/src/index.d.ts b/dist/npm/providers/src/index.d.ts deleted file mode 100644 index 410e31c5..00000000 --- a/dist/npm/providers/src/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "@prvdmwrong/dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/dist/npm/providers/src/init.luau b/dist/npm/providers/src/init.luau deleted file mode 100644 index d678d850..00000000 --- a/dist/npm/providers/src/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/dist/npm/providers/src/name-of.luau b/dist/npm/providers/src/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/dist/npm/providers/src/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/dist/npm/prvdmwrong/LICENSE.md b/dist/npm/prvdmwrong/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/prvdmwrong/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/prvdmwrong/dependencies.luau b/dist/npm/prvdmwrong/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/npm/prvdmwrong/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/npm/prvdmwrong/lifecycles.luau b/dist/npm/prvdmwrong/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/npm/prvdmwrong/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/npm/prvdmwrong/package.json b/dist/npm/prvdmwrong/package.json deleted file mode 100644 index 9ebac38e..00000000 --- a/dist/npm/prvdmwrong/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/dependencies": "0.2.0-rc.4", - "@prvdmwrong/lifecycles": "0.2.0-rc.4", - "@prvdmwrong/providers": "0.2.0-rc.4", - "@prvdmwrong/roots": "0.2.0-rc.4" - }, - "description": "Entry point to Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/prvdmwrong", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/prvdmwrong/providers.luau b/dist/npm/prvdmwrong/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/npm/prvdmwrong/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/npm/prvdmwrong/roots.luau b/dist/npm/prvdmwrong/roots.luau deleted file mode 100644 index c606c7bd..00000000 --- a/dist/npm/prvdmwrong/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./Packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/npm/prvdmwrong/src/index.d.ts b/dist/npm/prvdmwrong/src/index.d.ts deleted file mode 100644 index 4200df79..00000000 --- a/dist/npm/prvdmwrong/src/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "@prvdmwrong/dependencies"; -import lifecycles from "@prvdmwrong/lifecycles"; -import providers from "@prvdmwrong/providers"; -import roots from "@prvdmwrong/roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/dist/npm/prvdmwrong/src/init.luau b/dist/npm/prvdmwrong/src/init.luau deleted file mode 100644 index 1381801d..00000000 --- a/dist/npm/prvdmwrong/src/init.luau +++ /dev/null @@ -1,45 +0,0 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") - -export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle -export type Root = roots.Root -export type StartedRoot = roots.StartedRoot - -local prvd = { - provider = providers.create, - root = roots.create, - depend = dependencies.depend, - nameOf = providers.nameOf, - - lifecycle = lifecycles.create, - fireConcurrent = lifecycles.handlers.fireConcurrent, - fireSequential = lifecycles.handlers.fireSequential, - - hooks = table.freeze({ - onProviderUsed = roots.hooks.onProviderUsed, - onLifecycleUsed = roots.hooks.onLifecycleUsed, - onRootConstructing = roots.hooks.onRootConstructing, - onRootUsed = roots.hooks.onRootUsed, - onRootStarted = roots.hooks.onRootStarted, - onRootFinished = roots.hooks.onRootFinished, - onRootDestroyed = roots.hooks.onRootDestroyed, - - onLifecycleConstructed = lifecycles.hooks.onLifecycleConstructed, - onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, - onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, - onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), -} - -type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) - -local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -local module: PrvdModule = setmetatable(prvd, mt) :: any -return module diff --git a/dist/npm/rbx-components/LICENSE.md b/dist/npm/rbx-components/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/rbx-components/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/rbx-components/dependencies.luau b/dist/npm/rbx-components/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/npm/rbx-components/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/npm/rbx-components/logger.luau b/dist/npm/rbx-components/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/npm/rbx-components/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/npm/rbx-components/package.json b/dist/npm/rbx-components/package.json deleted file mode 100644 index f7343109..00000000 --- a/dist/npm/rbx-components/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/dependencies": "0.2.0-rc.4", - "@prvdmwrong/logger": "0.2.0-rc.4", - "@prvdmwrong/providers": "0.2.0-rc.4", - "@prvdmwrong/roots": "0.2.0-rc.4" - }, - "description": "Component functionality for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/rbx-components", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/rbx-components/providers.luau b/dist/npm/rbx-components/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/npm/rbx-components/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/npm/rbx-components/roots.luau b/dist/npm/rbx-components/roots.luau deleted file mode 100644 index c606c7bd..00000000 --- a/dist/npm/rbx-components/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./Packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/npm/rbx-components/src/component-classes.luau b/dist/npm/rbx-components/src/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/dist/npm/rbx-components/src/component-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local componentClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return componentClasses diff --git a/dist/npm/rbx-components/src/component-provider.luau b/dist/npm/rbx-components/src/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/dist/npm/rbx-components/src/component-provider.luau +++ /dev/null @@ -1,185 +0,0 @@ -local CollectionService = game:GetService("CollectionService") - -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") - -local threadpool = runtime.threadpool - -type Set = { [T]: true } -type ConstructedComponent = types.AnyComponent -type LuauBug = any - -local ComponentProvider = {} -ComponentProvider.priority = -math.huge -ComponentProvider.name = "@rbx-components" - -function ComponentProvider.constructor(self: ComponentProvider) - self.componentClasses = {} :: Set - self.tagToComponentClasses = {} :: { [string]: Set } - self.instanceToComponents = {} :: { [Instance]: { [types.AnyComponent]: ConstructedComponent } } - self.componentToInstances = {} :: { [types.AnyComponent]: Set? } - self.constructedToClass = {} :: { [ConstructedComponent]: types.AnyComponent? } - - self._destroyingConnections = {} :: { [Instance]: RBXScriptConnection } - self._connections = {} :: { RBXScriptConnection } -end - -function ComponentProvider.start(self: ComponentProvider) - for tag, components in self.tagToComponentClasses do - local function onTagAdded(instance) - local instanceToComponents = self.instanceToComponents[instance] - if not instanceToComponents then - instanceToComponents = {} - self.instanceToComponents[instance] = instanceToComponents - end - - for componentClass in components do - if - (componentClass.blacklistInstances and (componentClass.blacklistInstances :: LuauBug)[instance]) - or (componentClass.whitelistInstances and not (componentClass.whitelistInstances :: LuauBug)[instance]) - or (componentClass.instanceCheck and not componentClass.instanceCheck(instance)) - then - continue - end - - local component: ConstructedComponent = instanceToComponents[componentClass] - if not component then - component = componentClass.new(instance) - instanceToComponents[componentClass] = component - self.constructedToClass[component :: any] = componentClass - end - - if component.added then - component:added() - end - end - - if not self._destroyingConnections[instance] then - self._destroyingConnections[instance] = instance.Destroying:Once(function() - for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end - end - table.clear(instanceToComponents) - self.instanceToComponents[instance] = nil - end) - end - end - - table.insert(self._connections, CollectionService:GetInstanceAddedSignal(tag):Connect(onTagAdded)) - table.insert(self._connections, CollectionService:GetInstanceRemovedSignal(tag):Connect(function(instance) end)) - - for _, instance in CollectionService:GetTagged(tag) do - onTagAdded(instance) - end - end -end - -function ComponentProvider.destroy(self: ComponentProvider) - for _, components in self.instanceToComponents do - for _, component in components do - if component.destroy then - component:destroy() - end - end - table.clear(components) - end - - table.clear(self.componentClasses) - table.clear(self.tagToComponentClasses) - table.clear(self.instanceToComponents) - table.clear(self.componentToInstances) - table.clear(self.constructedToClass) - - for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end - end - - for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end - end - - table.clear(self._connections) - table.clear(self._destroyingConnections) -end - -function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end - - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end - - if class.tag then - local tagToComponentClasses = self.tagToComponentClasses[class.tag] - - if tagToComponentClasses then - if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) - end - else - tagToComponentClasses = {} - self.tagToComponentClasses[class.tag] = tagToComponentClasses - end - - (tagToComponentClasses :: any)[class] = true - end - - self.componentClasses[class] = true - self.componentToInstances[class] = {} -end - -function ComponentProvider.getFromInstance( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - return self.instanceToComponents[instance :: any][class] -end - -function ComponentProvider.getAllComponents( - self: ComponentProvider, - class: types.Component -): Set> - local result = {} - for _, components in self.instanceToComponents do - for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end - end - end - return result :: any -end - -function ComponentProvider.addComponent( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - error("not yet implemented") -end - -function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) - local constructed = self:getFromInstance(class, instance) - if constructed then - self.instanceToComponents[instance :: any][class] = nil - - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end - end -end - -export type ComponentProvider = typeof(ComponentProvider) -return providers.create(ComponentProvider) diff --git a/dist/npm/rbx-components/src/create.luau b/dist/npm/rbx-components/src/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/dist/npm/rbx-components/src/create.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("./component-classes") -local types = require("./types") - --- TODO: prvdmwrong/classes package? -local function create(self: Self): types.Component - local component: types.Component = self :: any - - if component.__index == nil then - component.__index = component - end - - -- TODO: abstract nameOf - - if component.new == nil then - function component.new(instance: any) - local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end - return self - end - end - - componentClasses[component] = true - return component -end - -return create diff --git a/dist/npm/rbx-components/src/logger.luau b/dist/npm/rbx-components/src/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/dist/npm/rbx-components/src/logger.luau +++ /dev/null @@ -1,8 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { - alreadyExtendedRoot = "Root already has component extension.", - invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", - alreadyRegisteredComponent = "Component already registered.", - multipleSameTag = "Multiple components use the CollectionService tag '%s', which is likely a mistake. Supress this warning with `_G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG = true`.", -}) diff --git a/dist/npm/rbx-components/src/types.luau b/dist/npm/rbx-components/src/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/dist/npm/rbx-components/src/types.luau +++ /dev/null @@ -1,30 +0,0 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") - -export type Component = dependencies.Dependency, - tag: string?, - instanceCheck: (unknown) -> boolean, - blacklistInstances: { Instance }?, - whitelistInstances: { Instance }?, - constructor: (self: Component, instance: Instance) -> ()?, - added: (self: Component) -> ()?, - removed: (self: Component) -> ()?, - destroyed: (self: Component) -> ()?, -}, nil, Instance> - -export type Root = roots.Root & { - useModuleAsComponent: (root: Root, module: ModuleScript) -> Root, - useModulesAsComponents: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useComponent: (root: Root, component: Component) -> Root, - useComponents: (root: Root, components: { Component }) -> Root, -} - -export type RootPrivate = Root & { - _hasComponentExtensions: true?, - _classes: { Component }, -} - -export type AnyComponent = Component - -return nil diff --git a/dist/npm/rbx-lifecycles/LICENSE.md b/dist/npm/rbx-lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/rbx-lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/rbx-lifecycles/package.json b/dist/npm/rbx-lifecycles/package.json deleted file mode 100644 index 3dffc1ae..00000000 --- a/dist/npm/rbx-lifecycles/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/prvdmwrong": "0.2.0-rc.4" - }, - "description": "Lifecycles implementations for Roblox", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/rbx-lifecycles", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/rbx-lifecycles/prvdmwrong.luau b/dist/npm/rbx-lifecycles/prvdmwrong.luau deleted file mode 100644 index 6f986dff..00000000 --- a/dist/npm/rbx-lifecycles/prvdmwrong.luau +++ /dev/null @@ -1,6 +0,0 @@ -local DEPENDENCY = require("./Packages/prvdmwrong") -export type Root = DEPENDENCY.Root -export type Lifecycle = DEPENDENCY.Lifecycle -export type StartedRoot = DEPENDENCY.StartedRoot -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/npm/rbx-lifecycles/src/index.d.ts b/dist/npm/rbx-lifecycles/src/index.d.ts deleted file mode 100644 index 98361bf5..00000000 --- a/dist/npm/rbx-lifecycles/src/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Lifecycle } from "@prvdmwrong/lifecycles"; -import { Provider } from "@prvdmwrong/providers"; - -declare namespace RbxLifecycles { - export const RbxLifecycles: Provider<{ - preSimulation: Lifecycle<[dt: number]>; - postSimulation: Lifecycle<[dt: number]>; - preAnimation: Lifecycle<[dt: number]>; - preRender: Lifecycle<[dt: number]>; - playerAdded: Lifecycle<[player: Player]>; - playerRemoving: Lifecycle<[player: Player]>; - }>; - - export interface PreSimulation { - preSimulation(dt: number): void; - } - - export interface PostSimulation { - postSimulation(dt: number): void; - } - - export interface PreAnimation { - preAnimation(dt: number): void; - } - - export interface PreRender { - preRender(dt: number): void; - } - - export interface PlayerAdded { - playerAdded(player: Player): void; - } - - export interface PlayerRemoving { - playerRemoving(player: Player): void; - } -} - -export = RbxLifecycles; -export as namespace RbxLifecycles; diff --git a/dist/npm/rbx-lifecycles/src/init.luau b/dist/npm/rbx-lifecycles/src/init.luau deleted file mode 100644 index c1243680..00000000 --- a/dist/npm/rbx-lifecycles/src/init.luau +++ /dev/null @@ -1,67 +0,0 @@ -local Players = game:GetService("Players") -local RunService = game:GetService("RunService") - -local prvd = require("./prvdmwrong") - -local fireConcurrent = prvd.fireConcurrent - -local RbxLifecycles = {} -RbxLifecycles.name = "@prvdmwrong/rbx-lifecycles" -RbxLifecycles.priority = -math.huge - -RbxLifecycles.preSimulation = prvd.lifecycle("preSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.postSimulation = prvd.lifecycle("postSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preAnimation = prvd.lifecycle("preAnimation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preRender = prvd.lifecycle("preRender", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerAdded = prvd.lifecycle("playerAdded", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerRemoving = prvd.lifecycle("playerRemoving", fireConcurrent) :: prvd.Lifecycle - -local function wrapLifecycle(lifecycle: prvd.Lifecycle<...unknown>) - return function(...: unknown) - lifecycle:fire(...) - end -end - -function RbxLifecycles.constructor(self: RbxLifecycles) - self.connections = {} :: { RBXScriptConnection } - - self:_addConnections( - RunService.PreSimulation:Connect(wrapLifecycle(RbxLifecycles.preSimulation :: any)), - RunService.PostSimulation:Connect(wrapLifecycle(RbxLifecycles.postSimulation :: any)), - RunService.PreAnimation:Connect(wrapLifecycle(RbxLifecycles.preAnimation :: any)) - ) - - if RunService:IsClient() then - self:_addConnections(RunService.PreRender:Connect(wrapLifecycle(RbxLifecycles.preRender :: any))) - end - - self:_addConnections( - Players.PlayerAdded:Connect(wrapLifecycle(RbxLifecycles.playerAdded :: any)), - Players.PlayerRemoving:Connect(wrapLifecycle(RbxLifecycles.playerRemoving :: any)) - ) -end - -function RbxLifecycles.finish(self: RbxLifecycles) - for _, connection in self.connections do - if connection.Connected then - connection:Disconnect() - end - end - table.clear(self.connections) -end - -function RbxLifecycles._addConnections(self: RbxLifecycles, ...: RBXScriptConnection) - for index = 1, select("#", ...) do - table.insert(self.connections, select(index, ...) :: any) - end -end - --- Needed so typescript can require the provider as: --- --- ```ts --- import { RbxLifecycles } from "@rbxts/rbx-lifecycles" --- ``` -RbxLifecycles.RbxLifecycles = RbxLifecycles - -export type RbxLifecycles = typeof(RbxLifecycles) -return prvd(RbxLifecycles) diff --git a/dist/npm/roots/LICENSE.md b/dist/npm/roots/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/roots/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/roots/dependencies.luau b/dist/npm/roots/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/npm/roots/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/npm/roots/lifecycles.luau b/dist/npm/roots/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/npm/roots/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/npm/roots/logger.luau b/dist/npm/roots/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/npm/roots/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/npm/roots/package.json b/dist/npm/roots/package.json deleted file mode 100644 index a65ab21b..00000000 --- a/dist/npm/roots/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": { - "@prvdmwrong/dependencies": "0.2.0-rc.4", - "@prvdmwrong/lifecycles": "0.2.0-rc.4", - "@prvdmwrong/logger": "0.2.0-rc.4", - "@prvdmwrong/providers": "0.2.0-rc.4", - "@prvdmwrong/runtime": "0.2.0-rc.4" - }, - "description": "Roots implementation for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/roots", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/roots/providers.luau b/dist/npm/roots/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/npm/roots/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/npm/roots/runtime.luau b/dist/npm/roots/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/npm/roots/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/npm/roots/src/create.luau b/dist/npm/roots/src/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/dist/npm/roots/src/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/dist/npm/roots/src/index.d.ts b/dist/npm/roots/src/index.d.ts deleted file mode 100644 index 6fadb025..00000000 --- a/dist/npm/roots/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "@prvdmwrong/lifecycles"; -import { Provider } from "@prvdmwrong/providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/dist/npm/roots/src/init.luau b/dist/npm/roots/src/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/dist/npm/roots/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/dist/npm/roots/src/logger.luau b/dist/npm/roots/src/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/dist/npm/roots/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { - useAfterDestroy = "Cannot use Root after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/npm/roots/src/types.luau b/dist/npm/roots/src/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/dist/npm/roots/src/types.luau +++ /dev/null @@ -1,40 +0,0 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") - -type Set = { [T]: true } - -export type Root = { - type: "Root", - - start: (root: Root) -> StartedRoot, - - useModule: (root: Root, module: ModuleScript) -> Root, - useModules: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useRoot: (root: Root, root: Root) -> Root, - useRoots: (root: Root, roots: { Root }) -> Root, - useProvider: (root: Root, provider: providers.Provider) -> Root, - useProviders: (root: Root, providers: { providers.Provider }) -> Root, - useLifecycle: (root: Root, lifecycle: lifecycles.Lifecycle) -> Root, - useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, - destroy: (root: Root) -> (), - - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, -} - -export type StartedRoot = { - type: "StartedRoot", - - finish: (root: StartedRoot) -> (), -} - -export type Self = Root & { - _destroyed: boolean, - _rootProviders: Set>, - _rootLifecycles: { lifecycles.Lifecycle }, - _subRoots: Set, - _start: lifecycles.Lifecycle<()>, - _finish: lifecycles.Lifecycle<()>, -} - -return nil diff --git a/dist/npm/runtime/LICENSE.md b/dist/npm/runtime/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/runtime/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/runtime/package.json b/dist/npm/runtime/package.json deleted file mode 100644 index ab51e871..00000000 --- a/dist/npm/runtime/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": {}, - "description": "Runtime agnostic libraries for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/runtime", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/runtime/src/index.d.ts b/dist/npm/runtime/src/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/dist/npm/runtime/src/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/dist/npm/runtime/src/init.luau b/dist/npm/runtime/src/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/dist/npm/runtime/src/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/dist/npm/typecheckers/LICENSE.md b/dist/npm/typecheckers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/npm/typecheckers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/npm/typecheckers/package.json b/dist/npm/typecheckers/package.json deleted file mode 100644 index c6bd8d0f..00000000 --- a/dist/npm/typecheckers/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "author": "Fire ", - "bugs": { - "url": "https://github.com/prvdmwrong/prvdmwrong/issues" - }, - "dependencies": {}, - "description": "Typechecking primitives and compatibility for Prvd 'M Wrong", - "files": [ - "src", - "LICENSE.md", - "package.json" - ], - "main": "src/init.luau", - "name": "@prvdmwrong/typecheckers", - "repository": { - "type": "git", - "url": "git+https://github.com/prvdmwrong/prvdmwrong.git" - }, - "types": "src/init.luau", - "version": "0.2.0-rc.4" -} \ No newline at end of file diff --git a/dist/npm/typecheckers/src/init.luau b/dist/npm/typecheckers/src/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/pesde/luau/dependencies/LICENSE.md b/dist/pesde/luau/dependencies/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/dependencies/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/dependencies/lifecycles.luau b/dist/pesde/luau/dependencies/lifecycles.luau deleted file mode 100644 index a79c5172..00000000 --- a/dist/pesde/luau/dependencies/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/luau/dependencies/logger.luau b/dist/pesde/luau/dependencies/logger.luau deleted file mode 100644 index 527ed682..00000000 --- a/dist/pesde/luau/dependencies/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./luau_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/luau/dependencies/pesde.toml b/dist/pesde/luau/dependencies/pesde.toml deleted file mode 100644 index 8533f8d8..00000000 --- a/dist/pesde/luau/dependencies/pesde.toml +++ /dev/null @@ -1,37 +0,0 @@ -authors = ["Fire "] -description = "Dependency resolution logic for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/dependencies" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/dependencies/src/index.d.ts b/dist/pesde/luau/dependencies/src/index.d.ts deleted file mode 100644 index a5bddcde..00000000 --- a/dist/pesde/luau/dependencies/src/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "../lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/dist/pesde/luau/dependencies/src/init.luau b/dist/pesde/luau/dependencies/src/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/dist/pesde/luau/dependencies/src/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/dist/pesde/luau/dependencies/src/process-dependencies.luau b/dist/pesde/luau/dependencies/src/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/dist/pesde/luau/dependencies/src/process-dependencies.luau +++ /dev/null @@ -1,57 +0,0 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") - -export type ProccessDependencyResult = { - sortedDependencies: { types.Dependency }, - lifecycles: { lifecycles.Lifecycle }, -} - -type Set = { [T]: true } - -local function processDependencies(dependencies: Set>): ProccessDependencyResult - local sortedDependencies = {} - local lifecycles = {} - - -- TODO: optimize ts - local function visitDependency(dependency: types.Dependency) - -- print("Visiting dependency", dependency) - - for key, value in dependency :: any do - if key == "dependencies" then - -- print("Checking [prvd.dependencies]") - if typeof(value) == "table" then - for key, value in value do - -- print("Checking key", key, "value", value) - if typeof(value) == "table" and value.type == "UnresolvedDependency" then - local unresolved: types.UnresolvedDependency = value - -- print("Got unresolved dependency", unresolved.dependency, "visiting") - visitDependency(unresolved.dependency) - end - end - end - - continue - end - - if typeof(value) == "table" and value.type == "Lifecycle" and not table.find(lifecycles, value) then - table.insert(lifecycles, value) - end - end - - if dependencies[dependency] and not table.find(sortedDependencies, dependency) then - -- print("Pushing to sort") - table.insert(sortedDependencies, dependency) - end - end - - for dependency in dependencies do - visitDependency(dependency) - end - - return { - sortedDependencies = sortedDependencies, - lifecycles = lifecycles, - } -end - -return processDependencies diff --git a/dist/pesde/luau/dependencies/src/process-dependencies.spec.luau b/dist/pesde/luau/dependencies/src/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/dist/pesde/luau/dependencies/src/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/dist/pesde/luau/dependencies/src/sort-by-priority.spec.luau b/dist/pesde/luau/dependencies/src/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/dist/pesde/luau/dependencies/src/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/dist/pesde/luau/dependencies/src/types.luau b/dist/pesde/luau/dependencies/src/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/dist/pesde/luau/dependencies/src/types.luau +++ /dev/null @@ -1,14 +0,0 @@ -export type Dependency = Self & { - dependencies: Dependencies, - priority: number?, - new: (dependencies: Dependencies, NewArgs...) -> Dependency, -} - -export type UnresolvedDependency = { - type: "UnresolvedDependency", - dependency: Dependency, -} - -export type dependencies = { __prvdmwrong_dependencies: never } - -return nil diff --git a/dist/pesde/luau/lifecycles/LICENSE.md b/dist/pesde/luau/lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/lifecycles/logger.luau b/dist/pesde/luau/lifecycles/logger.luau deleted file mode 100644 index 527ed682..00000000 --- a/dist/pesde/luau/lifecycles/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./luau_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/luau/lifecycles/pesde.toml b/dist/pesde/luau/lifecycles/pesde.toml deleted file mode 100644 index a427c0bc..00000000 --- a/dist/pesde/luau/lifecycles/pesde.toml +++ /dev/null @@ -1,37 +0,0 @@ -authors = ["Fire "] -description = "Provider method lifecycles implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/lifecycles" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/lifecycles/runtime.luau b/dist/pesde/luau/lifecycles/runtime.luau deleted file mode 100644 index 0345a532..00000000 --- a/dist/pesde/luau/lifecycles/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/luau/lifecycles/src/create.luau b/dist/pesde/luau/lifecycles/src/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/dist/pesde/luau/lifecycles/src/create.luau +++ /dev/null @@ -1,45 +0,0 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") - -local function create( - method: string, - onFire: (lifecycle: types.Lifecycle, Args...) -> () -): types.Lifecycle - local self: types.Self = { - _isDestroyed = false, - _selfRegistered = {}, - _selfUnregistered = {}, - - type = "Lifecycle", - callbacks = {}, - - fire = onFire, - method = method, - register = register, - unregister = unregister, - clear = clear, - onRegistered = onRegistered, - onUnregistered = onUnregistered, - await = await, - destroy = destroy, - } :: any - - methodToLifecycles[method] = methodToLifecycles[method] or {} - table.insert(methodToLifecycles[method], self) - - for _, onLifecycleConstructed in lifecycleConstructed.callbacks do - onLifecycleConstructed(self :: types.Lifecycle) - end - - return self -end - -return create diff --git a/dist/pesde/luau/lifecycles/src/handlers/fire-sequential.luau b/dist/pesde/luau/lifecycles/src/handlers/fire-sequential.luau deleted file mode 100644 index 80911ad9..00000000 --- a/dist/pesde/luau/lifecycles/src/handlers/fire-sequential.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -local function fireSequential(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - callback(...) - end -end - -return fireSequential diff --git a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-destroyed.luau b/dist/pesde/luau/lifecycles/src/hooks/lifecycle-destroyed.luau deleted file mode 100644 index 47abcfab..00000000 --- a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleDestroyed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleDestroyed = onLifecycleDestroyed, -}) diff --git a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-registered.luau b/dist/pesde/luau/lifecycles/src/hooks/lifecycle-registered.luau deleted file mode 100644 index fab588a3..00000000 --- a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-registered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleRegistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleRegistered = onLifecycleRegistered, -}) diff --git a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-unregistered.luau b/dist/pesde/luau/lifecycles/src/hooks/lifecycle-unregistered.luau deleted file mode 100644 index 0ec81756..00000000 --- a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-unregistered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleUnregistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUnregistered = onLifecycleUnregistered, -}) diff --git a/dist/pesde/luau/lifecycles/src/index.d.ts b/dist/pesde/luau/lifecycles/src/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/dist/pesde/luau/lifecycles/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/dist/pesde/luau/lifecycles/src/init.luau b/dist/pesde/luau/lifecycles/src/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/dist/pesde/luau/lifecycles/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/dist/pesde/luau/lifecycles/src/logger.luau b/dist/pesde/luau/lifecycles/src/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/dist/pesde/luau/lifecycles/src/logger.luau +++ /dev/null @@ -1,6 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { - useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", -}) diff --git a/dist/pesde/luau/lifecycles/src/methods/on-unregistered.luau b/dist/pesde/luau/lifecycles/src/methods/on-unregistered.luau deleted file mode 100644 index 842040ec..00000000 --- a/dist/pesde/luau/lifecycles/src/methods/on-unregistered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onUnregistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end - table.insert(lifecycle._selfUnregistered, listener) - return function() - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end -end - -return onUnregistered diff --git a/dist/pesde/luau/lifecycles/src/methods/register.luau b/dist/pesde/luau/lifecycles/src/methods/register.luau deleted file mode 100644 index 3fd74d56..00000000 --- a/dist/pesde/luau/lifecycles/src/methods/register.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function register(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle.callbacks, table.find(lifecycle.callbacks, callback)) - end - table.insert(lifecycle.callbacks, callback) - threadpool.spawnCallbacks(lifecycle._selfRegistered, callback) -end - -return register diff --git a/dist/pesde/luau/lifecycles/src/methods/unregister-all.luau b/dist/pesde/luau/lifecycles/src/methods/unregister-all.luau deleted file mode 100644 index 5e6235af..00000000 --- a/dist/pesde/luau/lifecycles/src/methods/unregister-all.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function clear(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - for _, callback in lifecycle.callbacks do - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end - table.clear(lifecycle.callbacks) -end - -return clear diff --git a/dist/pesde/luau/lifecycles/src/methods/unregister.luau b/dist/pesde/luau/lifecycles/src/methods/unregister.luau deleted file mode 100644 index 0ca7223f..00000000 --- a/dist/pesde/luau/lifecycles/src/methods/unregister.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function unregister(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local index = table.find(lifecycle.callbacks, callback) - if index then - table.remove(lifecycle.callbacks, index) - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end -end - -return unregister diff --git a/dist/pesde/luau/lifecycles/src/types.luau b/dist/pesde/luau/lifecycles/src/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/dist/pesde/luau/lifecycles/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Lifecycle = { - type: "Lifecycle", - - callbacks: { (Args...) -> () }, - method: string, - - register: (self: Lifecycle, callback: (Args...) -> ()) -> (), - fire: (self: Lifecycle, Args...) -> (), - unregister: (self: Lifecycle, callback: (Args...) -> ()) -> (), - clear: (self: Lifecycle) -> (), - onRegistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - onUnregistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - await: (self: Lifecycle) -> Args..., - destroy: (self: Lifecycle) -> (), -} - -export type Self = Lifecycle & { - _isDestroyed: boolean, - _selfRegistered: { (callback: (Args...) -> ()) -> () }, - _selfUnregistered: { (callback: (Args...) -> ()) -> () }, -} - -return nil diff --git a/dist/pesde/luau/logger/LICENSE.md b/dist/pesde/luau/logger/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/logger/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/logger/pesde.toml b/dist/pesde/luau/logger/pesde.toml deleted file mode 100644 index fcf24d8d..00000000 --- a/dist/pesde/luau/logger/pesde.toml +++ /dev/null @@ -1,30 +0,0 @@ -authors = ["Fire "] -description = "Logging for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", - "runtime.luau", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/logger" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", - "runtime.luau", - "runtime.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/logger/runtime.luau b/dist/pesde/luau/logger/runtime.luau deleted file mode 100644 index 0345a532..00000000 --- a/dist/pesde/luau/logger/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/luau/logger/src/create.luau b/dist/pesde/luau/logger/src/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/dist/pesde/luau/logger/src/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/dist/pesde/luau/logger/src/format-log.luau b/dist/pesde/luau/logger/src/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/dist/pesde/luau/logger/src/format-log.luau +++ /dev/null @@ -1,43 +0,0 @@ -local types = require("./types") - -local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string - local formattedTemplate = string.format(log.template, table.unpack(log)) - - local error = log.error - local trace: string? = log.trace - - if error then - trace = error.trace - formattedTemplate = string.gsub(formattedTemplate, "ERROR_MESSAGE", error.message) - end - - local id: string? - - -- TODO: find a better way to do ts while still being ergonomic - for templateKey, template in (self :: any) :: { [string]: string } do - if template == log.template then - id = templateKey - break - end - end - - if id then - formattedTemplate ..= `\nID: {id}` - end - - if errorInfoUrl then - formattedTemplate ..= `\nLearn more: {errorInfoUrl}` - if id then - formattedTemplate ..= `#{string.lower(id)}` - end - end - - if trace then - formattedTemplate ..= `\n---- Stack trace ----\n{trace}` - end - - -- Labels are added from createLogger, so we don't add it here - return string.gsub(formattedTemplate, "\n", "\n ") -end - -return formatLog diff --git a/dist/pesde/luau/logger/src/index.d.ts b/dist/pesde/luau/logger/src/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/dist/pesde/luau/logger/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/dist/pesde/luau/logger/src/init.luau b/dist/pesde/luau/logger/src/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/dist/pesde/luau/logger/src/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/dist/pesde/luau/logger/src/standard-error-info-url.luau b/dist/pesde/luau/logger/src/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/dist/pesde/luau/logger/src/standard-error-info-url.luau +++ /dev/null @@ -1,5 +0,0 @@ -local function standardErrorInfoUrl(label: string): string - return `https://prvdmwrong.luau.page/api-reference/{label}/errors` -end - -return standardErrorInfoUrl diff --git a/dist/pesde/luau/logger/src/types.luau b/dist/pesde/luau/logger/src/types.luau deleted file mode 100644 index d1699037..00000000 --- a/dist/pesde/luau/logger/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Error = { - type: "Error", - raw: string, - message: string, - trace: string, -} - -export type Log = { - template: string, - error: Error?, - trace: string?, - [number]: unknown, -} - -export type Logger = Templates & { - type: "Logger", - print: (self: Logger, props: Log) -> (), - warn: (self: Logger, props: Log) -> (), - error: (self: Logger, props: Log) -> (), - fatalError: (self: Logger, props: Log) -> never, -} - -return nil diff --git a/dist/pesde/luau/providers/LICENSE.md b/dist/pesde/luau/providers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/providers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/providers/dependencies.luau b/dist/pesde/luau/providers/dependencies.luau deleted file mode 100644 index 61b0667d..00000000 --- a/dist/pesde/luau/providers/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/luau/providers/lifecycles.luau b/dist/pesde/luau/providers/lifecycles.luau deleted file mode 100644 index a79c5172..00000000 --- a/dist/pesde/luau/providers/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/luau/providers/logger.luau b/dist/pesde/luau/providers/logger.luau deleted file mode 100644 index 527ed682..00000000 --- a/dist/pesde/luau/providers/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./luau_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/luau/providers/pesde.toml b/dist/pesde/luau/providers/pesde.toml deleted file mode 100644 index c2fc7605..00000000 --- a/dist/pesde/luau/providers/pesde.toml +++ /dev/null @@ -1,51 +0,0 @@ -authors = ["Fire "] -description = "Provider creation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/providers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/providers/runtime.luau b/dist/pesde/luau/providers/runtime.luau deleted file mode 100644 index 0345a532..00000000 --- a/dist/pesde/luau/providers/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/luau/providers/src/create.luau b/dist/pesde/luau/providers/src/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/dist/pesde/luau/providers/src/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/dist/pesde/luau/providers/src/index.d.ts b/dist/pesde/luau/providers/src/index.d.ts deleted file mode 100644 index 2ab36e15..00000000 --- a/dist/pesde/luau/providers/src/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "../dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/dist/pesde/luau/providers/src/init.luau b/dist/pesde/luau/providers/src/init.luau deleted file mode 100644 index d678d850..00000000 --- a/dist/pesde/luau/providers/src/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/dist/pesde/luau/providers/src/name-of.luau b/dist/pesde/luau/providers/src/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/dist/pesde/luau/providers/src/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/dist/pesde/luau/providers/src/provider-classes.luau b/dist/pesde/luau/providers/src/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/dist/pesde/luau/providers/src/provider-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local providerClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return providerClasses diff --git a/dist/pesde/luau/providers/src/types.luau b/dist/pesde/luau/providers/src/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/dist/pesde/luau/providers/src/types.luau +++ /dev/null @@ -1,12 +0,0 @@ -local dependencies = require("../dependencies") - -export type Provider = dependencies.Dependency, - __tostring: (self: Provider) -> string, - name: string?, - constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, -}, Dependencies> - -return nil diff --git a/dist/pesde/luau/prvdmwrong/LICENSE.md b/dist/pesde/luau/prvdmwrong/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/prvdmwrong/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/prvdmwrong/dependencies.luau b/dist/pesde/luau/prvdmwrong/dependencies.luau deleted file mode 100644 index 61b0667d..00000000 --- a/dist/pesde/luau/prvdmwrong/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/luau/prvdmwrong/lifecycles.luau b/dist/pesde/luau/prvdmwrong/lifecycles.luau deleted file mode 100644 index a79c5172..00000000 --- a/dist/pesde/luau/prvdmwrong/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/luau/prvdmwrong/pesde.toml b/dist/pesde/luau/prvdmwrong/pesde.toml deleted file mode 100644 index c24ca094..00000000 --- a/dist/pesde/luau/prvdmwrong/pesde.toml +++ /dev/null @@ -1,51 +0,0 @@ -authors = ["Fire "] -description = "Entry point to Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/prvdmwrong" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/prvdmwrong/providers.luau b/dist/pesde/luau/prvdmwrong/providers.luau deleted file mode 100644 index 46125aaa..00000000 --- a/dist/pesde/luau/prvdmwrong/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/luau/prvdmwrong/roots.luau b/dist/pesde/luau/prvdmwrong/roots.luau deleted file mode 100644 index 33a0058a..00000000 --- a/dist/pesde/luau/prvdmwrong/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./luau_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/luau/prvdmwrong/src/index.d.ts b/dist/pesde/luau/prvdmwrong/src/index.d.ts deleted file mode 100644 index 2058129c..00000000 --- a/dist/pesde/luau/prvdmwrong/src/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "../dependencies"; -import lifecycles from "../lifecycles"; -import providers from "../providers"; -import roots from "../roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/dist/pesde/luau/prvdmwrong/src/init.luau b/dist/pesde/luau/prvdmwrong/src/init.luau deleted file mode 100644 index 1381801d..00000000 --- a/dist/pesde/luau/prvdmwrong/src/init.luau +++ /dev/null @@ -1,45 +0,0 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") - -export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle -export type Root = roots.Root -export type StartedRoot = roots.StartedRoot - -local prvd = { - provider = providers.create, - root = roots.create, - depend = dependencies.depend, - nameOf = providers.nameOf, - - lifecycle = lifecycles.create, - fireConcurrent = lifecycles.handlers.fireConcurrent, - fireSequential = lifecycles.handlers.fireSequential, - - hooks = table.freeze({ - onProviderUsed = roots.hooks.onProviderUsed, - onLifecycleUsed = roots.hooks.onLifecycleUsed, - onRootConstructing = roots.hooks.onRootConstructing, - onRootUsed = roots.hooks.onRootUsed, - onRootStarted = roots.hooks.onRootStarted, - onRootFinished = roots.hooks.onRootFinished, - onRootDestroyed = roots.hooks.onRootDestroyed, - - onLifecycleConstructed = lifecycles.hooks.onLifecycleConstructed, - onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, - onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, - onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), -} - -type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) - -local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -local module: PrvdModule = setmetatable(prvd, mt) :: any -return module diff --git a/dist/pesde/luau/rbx-components/LICENSE.md b/dist/pesde/luau/rbx-components/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/rbx-components/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/rbx-components/dependencies.luau b/dist/pesde/luau/rbx-components/dependencies.luau deleted file mode 100644 index 61b0667d..00000000 --- a/dist/pesde/luau/rbx-components/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/luau/rbx-components/logger.luau b/dist/pesde/luau/rbx-components/logger.luau deleted file mode 100644 index 527ed682..00000000 --- a/dist/pesde/luau/rbx-components/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./luau_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/luau/rbx-components/pesde.toml b/dist/pesde/luau/rbx-components/pesde.toml deleted file mode 100644 index 3891a15e..00000000 --- a/dist/pesde/luau/rbx-components/pesde.toml +++ /dev/null @@ -1,51 +0,0 @@ -authors = ["Fire "] -description = "Component functionality for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/rbx_components" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/rbx-components/providers.luau b/dist/pesde/luau/rbx-components/providers.luau deleted file mode 100644 index 46125aaa..00000000 --- a/dist/pesde/luau/rbx-components/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/luau/rbx-components/roots.luau b/dist/pesde/luau/rbx-components/roots.luau deleted file mode 100644 index 33a0058a..00000000 --- a/dist/pesde/luau/rbx-components/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./luau_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/luau/rbx-components/src/component-classes.luau b/dist/pesde/luau/rbx-components/src/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/dist/pesde/luau/rbx-components/src/component-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local componentClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return componentClasses diff --git a/dist/pesde/luau/rbx-components/src/component-provider.luau b/dist/pesde/luau/rbx-components/src/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/dist/pesde/luau/rbx-components/src/component-provider.luau +++ /dev/null @@ -1,185 +0,0 @@ -local CollectionService = game:GetService("CollectionService") - -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") - -local threadpool = runtime.threadpool - -type Set = { [T]: true } -type ConstructedComponent = types.AnyComponent -type LuauBug = any - -local ComponentProvider = {} -ComponentProvider.priority = -math.huge -ComponentProvider.name = "@rbx-components" - -function ComponentProvider.constructor(self: ComponentProvider) - self.componentClasses = {} :: Set - self.tagToComponentClasses = {} :: { [string]: Set } - self.instanceToComponents = {} :: { [Instance]: { [types.AnyComponent]: ConstructedComponent } } - self.componentToInstances = {} :: { [types.AnyComponent]: Set? } - self.constructedToClass = {} :: { [ConstructedComponent]: types.AnyComponent? } - - self._destroyingConnections = {} :: { [Instance]: RBXScriptConnection } - self._connections = {} :: { RBXScriptConnection } -end - -function ComponentProvider.start(self: ComponentProvider) - for tag, components in self.tagToComponentClasses do - local function onTagAdded(instance) - local instanceToComponents = self.instanceToComponents[instance] - if not instanceToComponents then - instanceToComponents = {} - self.instanceToComponents[instance] = instanceToComponents - end - - for componentClass in components do - if - (componentClass.blacklistInstances and (componentClass.blacklistInstances :: LuauBug)[instance]) - or (componentClass.whitelistInstances and not (componentClass.whitelistInstances :: LuauBug)[instance]) - or (componentClass.instanceCheck and not componentClass.instanceCheck(instance)) - then - continue - end - - local component: ConstructedComponent = instanceToComponents[componentClass] - if not component then - component = componentClass.new(instance) - instanceToComponents[componentClass] = component - self.constructedToClass[component :: any] = componentClass - end - - if component.added then - component:added() - end - end - - if not self._destroyingConnections[instance] then - self._destroyingConnections[instance] = instance.Destroying:Once(function() - for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end - end - table.clear(instanceToComponents) - self.instanceToComponents[instance] = nil - end) - end - end - - table.insert(self._connections, CollectionService:GetInstanceAddedSignal(tag):Connect(onTagAdded)) - table.insert(self._connections, CollectionService:GetInstanceRemovedSignal(tag):Connect(function(instance) end)) - - for _, instance in CollectionService:GetTagged(tag) do - onTagAdded(instance) - end - end -end - -function ComponentProvider.destroy(self: ComponentProvider) - for _, components in self.instanceToComponents do - for _, component in components do - if component.destroy then - component:destroy() - end - end - table.clear(components) - end - - table.clear(self.componentClasses) - table.clear(self.tagToComponentClasses) - table.clear(self.instanceToComponents) - table.clear(self.componentToInstances) - table.clear(self.constructedToClass) - - for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end - end - - for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end - end - - table.clear(self._connections) - table.clear(self._destroyingConnections) -end - -function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end - - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end - - if class.tag then - local tagToComponentClasses = self.tagToComponentClasses[class.tag] - - if tagToComponentClasses then - if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) - end - else - tagToComponentClasses = {} - self.tagToComponentClasses[class.tag] = tagToComponentClasses - end - - (tagToComponentClasses :: any)[class] = true - end - - self.componentClasses[class] = true - self.componentToInstances[class] = {} -end - -function ComponentProvider.getFromInstance( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - return self.instanceToComponents[instance :: any][class] -end - -function ComponentProvider.getAllComponents( - self: ComponentProvider, - class: types.Component -): Set> - local result = {} - for _, components in self.instanceToComponents do - for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end - end - end - return result :: any -end - -function ComponentProvider.addComponent( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - error("not yet implemented") -end - -function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) - local constructed = self:getFromInstance(class, instance) - if constructed then - self.instanceToComponents[instance :: any][class] = nil - - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end - end -end - -export type ComponentProvider = typeof(ComponentProvider) -return providers.create(ComponentProvider) diff --git a/dist/pesde/luau/rbx-components/src/create.luau b/dist/pesde/luau/rbx-components/src/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/dist/pesde/luau/rbx-components/src/create.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("./component-classes") -local types = require("./types") - --- TODO: prvdmwrong/classes package? -local function create(self: Self): types.Component - local component: types.Component = self :: any - - if component.__index == nil then - component.__index = component - end - - -- TODO: abstract nameOf - - if component.new == nil then - function component.new(instance: any) - local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end - return self - end - end - - componentClasses[component] = true - return component -end - -return create diff --git a/dist/pesde/luau/rbx-components/src/extend-root/create-component-class-provider.luau b/dist/pesde/luau/rbx-components/src/extend-root/create-component-class-provider.luau deleted file mode 100644 index 9d5ae999..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/create-component-class-provider.luau +++ /dev/null @@ -1,31 +0,0 @@ -local ComponentProvider = require("../component-provider") -local providers = require("../../providers") -local types = require("../types") - -local ComponentClassProvider = {} -ComponentClassProvider.priority = -math.huge -ComponentClassProvider.name = "@rbx-components.ComponentClassProvider" -ComponentClassProvider.dependencies = table.freeze({ - componentProvider = ComponentProvider, -}) - -ComponentClassProvider._components = {} :: { types.AnyComponent } - -function ComponentClassProvider.constructor( - self: ComponentClassProvider, - dependencies: typeof(ComponentClassProvider.dependencies) -) - for _, class in self._components do - dependencies.componentProvider:addComponentClass(class) - end -end - -export type ComponentClassProvider = typeof(ComponentClassProvider) - -local function createComponentClassProvider(components: { types.AnyComponent }) - local provider = table.clone(ComponentClassProvider) - provider._components = components - return providers.create(provider) -end - -return createComponentClassProvider diff --git a/dist/pesde/luau/rbx-components/src/extend-root/init.luau b/dist/pesde/luau/rbx-components/src/extend-root/init.luau deleted file mode 100644 index 6e9f0578..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/init.luau +++ /dev/null @@ -1,30 +0,0 @@ -local ComponentProvider = require("./component-provider") -local createComponentClassProvider = require("@self/create-component-class-provider") -local logger = require("./logger") -local roots = require("../roots") -local types = require("./types") -local useComponent = require("@self/use-component") -local useComponents = require("@self/use-components") -local useModuleAsComponent = require("@self/use-module-as-component") -local useModulesAsComponents = require("@self/use-modules-as-components") - -local function extendRoot(root: types.RootPrivate): types.Root - if root._hasComponentExtensions then - return logger:fatalError({ template = logger.alreadyExtendedRoot }) - end - - root._hasComponentExtensions = true - root._classes = {} - - root:useProvider(ComponentProvider) - root:useProvider(createComponentClassProvider(root._classes)) - - root.useComponent = useComponent :: any - root.useComponents = useComponents :: any - root.useModuleAsComponent = useModuleAsComponent :: any - root.useModulesAsComponents = useModulesAsComponents :: any - - return root -end - -return extendRoot :: (root: roots.Root) -> types.Root diff --git a/dist/pesde/luau/rbx-components/src/extend-root/use-component.luau b/dist/pesde/luau/rbx-components/src/extend-root/use-component.luau deleted file mode 100644 index b0bd8d1f..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/use-component.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function useComponent(root: types.RootPrivate, component: types.AnyComponent) - table.insert(root._classes, component) - return root -end - -return useComponent diff --git a/dist/pesde/luau/rbx-components/src/extend-root/use-components.luau b/dist/pesde/luau/rbx-components/src/extend-root/use-components.luau deleted file mode 100644 index 809a4006..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/use-components.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local function useComponents(root: types.RootPrivate, components: { types.AnyComponent }) - for index = 1, #components do - table.insert(root._classes, components[index]) - end - return root -end - -return useComponents diff --git a/dist/pesde/luau/rbx-components/src/extend-root/use-module-as-component.luau b/dist/pesde/luau/rbx-components/src/extend-root/use-module-as-component.luau deleted file mode 100644 index 46724fe7..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/use-module-as-component.luau +++ /dev/null @@ -1,12 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModuleAsComponent(root: types.RootPrivate, module: ModuleScript) - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - return root -end - -return useModuleAsComponent diff --git a/dist/pesde/luau/rbx-components/src/extend-root/use-modules-as-components.luau b/dist/pesde/luau/rbx-components/src/extend-root/use-modules-as-components.luau deleted file mode 100644 index bababafa..00000000 --- a/dist/pesde/luau/rbx-components/src/extend-root/use-modules-as-components.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModulesAsComponents( - root: types.RootPrivate, - modules: { Instance }, - predicate: ((ModuleScript) -> boolean)? -) - for index = 1, #modules do - local module = modules[index] - - if not module:IsA("ModuleScript") then - continue - end - - if predicate and not predicate(module) then - continue - end - - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - end - return root -end - -return useModulesAsComponents diff --git a/dist/pesde/luau/rbx-components/src/init.luau b/dist/pesde/luau/rbx-components/src/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/dist/pesde/luau/rbx-components/src/init.luau +++ /dev/null @@ -1,24 +0,0 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") - -export type Component = types.Component -export type Root = types.Root - -local components = { - create = create, - extendRoot = extendRoot, - _ = table.freeze({ - componentClasses = componentClasses, - }), -} - -local mt = {} - -function mt.__call(_, component: Self): types.Component - return create(component) -end - -table.freeze(mt) -return table.freeze(setmetatable(components, mt)) diff --git a/dist/pesde/luau/rbx-components/src/logger.luau b/dist/pesde/luau/rbx-components/src/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/dist/pesde/luau/rbx-components/src/logger.luau +++ /dev/null @@ -1,8 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { - alreadyExtendedRoot = "Root already has component extension.", - invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", - alreadyRegisteredComponent = "Component already registered.", - multipleSameTag = "Multiple components use the CollectionService tag '%s', which is likely a mistake. Supress this warning with `_G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG = true`.", -}) diff --git a/dist/pesde/luau/roots/LICENSE.md b/dist/pesde/luau/roots/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/roots/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/roots/dependencies.luau b/dist/pesde/luau/roots/dependencies.luau deleted file mode 100644 index 61b0667d..00000000 --- a/dist/pesde/luau/roots/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/luau/roots/lifecycles.luau b/dist/pesde/luau/roots/lifecycles.luau deleted file mode 100644 index a79c5172..00000000 --- a/dist/pesde/luau/roots/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/luau/roots/logger.luau b/dist/pesde/luau/roots/logger.luau deleted file mode 100644 index 527ed682..00000000 --- a/dist/pesde/luau/roots/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./luau_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/luau/roots/pesde.toml b/dist/pesde/luau/roots/pesde.toml deleted file mode 100644 index f79259d3..00000000 --- a/dist/pesde/luau/roots/pesde.toml +++ /dev/null @@ -1,58 +0,0 @@ -authors = ["Fire "] -description = "Roots implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/roots" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -environment = "luau" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/luau/roots/providers.luau b/dist/pesde/luau/roots/providers.luau deleted file mode 100644 index 46125aaa..00000000 --- a/dist/pesde/luau/roots/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/luau/roots/runtime.luau b/dist/pesde/luau/roots/runtime.luau deleted file mode 100644 index 0345a532..00000000 --- a/dist/pesde/luau/roots/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./luau_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/luau/roots/src/create.luau b/dist/pesde/luau/roots/src/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/dist/pesde/luau/roots/src/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/dist/pesde/luau/roots/src/hooks/lifecycle-used.luau b/dist/pesde/luau/roots/src/hooks/lifecycle-used.luau deleted file mode 100644 index bd29276a..00000000 --- a/dist/pesde/luau/roots/src/hooks/lifecycle-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycles = require("../../lifecycles") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: lifecycles.Lifecycle) -> () } = {} - -local function onLifecycleUsed(listener: (root: types.Root, lifecycle: lifecycles.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUsed = onLifecycleUsed, -}) diff --git a/dist/pesde/luau/roots/src/hooks/provider-used.luau b/dist/pesde/luau/roots/src/hooks/provider-used.luau deleted file mode 100644 index dac2573c..00000000 --- a/dist/pesde/luau/roots/src/hooks/provider-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providers = require("../../providers") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: providers.Provider) -> () } = {} - -local function onProviderUsed(listener: (root: types.Root, provider: providers.Provider) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onProviderUsed = onProviderUsed, -}) diff --git a/dist/pesde/luau/roots/src/hooks/root-constructing.luau b/dist/pesde/luau/roots/src/hooks/root-constructing.luau deleted file mode 100644 index 5fb8b819..00000000 --- a/dist/pesde/luau/roots/src/hooks/root-constructing.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootConstructing(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootConstructing = onRootConstructing, -}) diff --git a/dist/pesde/luau/roots/src/hooks/root-destroyed.luau b/dist/pesde/luau/roots/src/hooks/root-destroyed.luau deleted file mode 100644 index 10b79b54..00000000 --- a/dist/pesde/luau/roots/src/hooks/root-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootDestroyed(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootDestroyed = onRootDestroyed, -}) diff --git a/dist/pesde/luau/roots/src/hooks/root-started.luau b/dist/pesde/luau/roots/src/hooks/root-started.luau deleted file mode 100644 index 2ae6f90c..00000000 --- a/dist/pesde/luau/roots/src/hooks/root-started.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootStarted(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootStarted = onRootStarted, -}) diff --git a/dist/pesde/luau/roots/src/index.d.ts b/dist/pesde/luau/roots/src/index.d.ts deleted file mode 100644 index d8e100c5..00000000 --- a/dist/pesde/luau/roots/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/dist/pesde/luau/roots/src/init.luau b/dist/pesde/luau/roots/src/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/dist/pesde/luau/roots/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/dist/pesde/luau/roots/src/logger.luau b/dist/pesde/luau/roots/src/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/dist/pesde/luau/roots/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { - useAfterDestroy = "Cannot use Root after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/pesde/luau/roots/src/methods/destroy.luau b/dist/pesde/luau/roots/src/methods/destroy.luau deleted file mode 100644 index 0c62a935..00000000 --- a/dist/pesde/luau/roots/src/methods/destroy.luau +++ /dev/null @@ -1,16 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function destroy(root: types.Self) - if root._destroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - root._destroyed = true - table.clear(root._rootLifecycles) - table.clear(root._rootProviders) - table.clear(root._subRoots) - root._start:clear() - root._finish:clear() -end - -return destroy diff --git a/dist/pesde/luau/roots/src/methods/start.luau b/dist/pesde/luau/roots/src/methods/start.luau deleted file mode 100644 index 3f24dac5..00000000 --- a/dist/pesde/luau/roots/src/methods/start.luau +++ /dev/null @@ -1,102 +0,0 @@ -local dependencies = require("../../dependencies") -local lifecycles = require("../../lifecycles") -local logger = require("../logger") -local providers = require("../../providers") -local rootFinished = require("../hooks/root-finished").callbacks -local rootStarted = require("../hooks/root-started").callbacks -local types = require("../types") - -local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: providers.Provider) - local lifecycleMethod = (provider :: any)[lifecycle.method] - if typeof(lifecycleMethod) == "function" then - -- local isProfiling = _G.PRVDMWRONG_PROFILE_LIFECYCLES - - -- if isProfiling then - -- lifecycle:register(function(...) - -- debug.profilebegin(memoryCategory) - -- debug.setmemorycategory(memoryCategory) - -- lifecycleMethod(provider, ...) - -- debug.resetmemorycategory() - -- debug.profileend() - -- end) - -- else - lifecycle:register(function(...) - lifecycleMethod(provider, ...) - end) - -- end - end -end - -local function nameOf(provider: providers.Provider, extension: string?): string - return if extension then `{tostring(provider)}.{extension}` else tostring(provider) -end - -local function start(root: types.Self): types.StartedRoot - local processed = dependencies.processDependencies(root._rootProviders) - local sortedProviders = processed.sortedDependencies :: { providers.Provider } - local processedLifecycles = processed.lifecycles - table.move(root._rootLifecycles, 1, #root._rootLifecycles, #processedLifecycles + 1, processedLifecycles) - - dependencies.sortByPriority(sortedProviders) - - local constructedProviders = {} - for _, provider in sortedProviders do - local providerDependencies = (provider :: any).dependencies - if typeof(providerDependencies) == "table" then - providerDependencies = table.clone(providerDependencies) - for key, value in providerDependencies do - providerDependencies[key] = constructedProviders[value] - end - end - - local constructed = provider.new(providerDependencies) - constructedProviders[provider] = constructed - bindLifecycle(root._start, constructed) - bindLifecycle(root._finish, constructed) - - for _, lifecycle in processedLifecycles do - bindLifecycle(lifecycle, constructed) - end - end - - local subRoots: { types.StartedRoot } = {} - for root in root._subRoots do - table.insert(subRoots, root:start()) - end - - root._start:fire() - - local startedRoot = {} :: types.StartedRoot - startedRoot.type = "StartedRoot" - - local didFinish = false - - function startedRoot:finish() - if didFinish then - return logger:fatalError({ template = logger.alreadyFinished }) - end - - didFinish = true - root._finish:fire() - - -- NOTE(znotfireman): Assume the user cleans up their own lifecycles - root._start:clear() - root._finish:clear() - - for _, subRoot in subRoots do - subRoot:finish() - end - - for _, hook in rootFinished do - hook(root) - end - end - - for _, hook in rootStarted do - hook(root) - end - - return startedRoot -end - -return start diff --git a/dist/pesde/luau/roots/src/methods/use-lifecycle.luau b/dist/pesde/luau/roots/src/methods/use-lifecycle.luau deleted file mode 100644 index 862c2d07..00000000 --- a/dist/pesde/luau/roots/src/methods/use-lifecycle.luau +++ /dev/null @@ -1,14 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycle(root: types.Self, lifecycle: lifecycles.Lifecycle) - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - return root -end - -return useLifecycle diff --git a/dist/pesde/luau/roots/src/methods/use-lifecycles.luau b/dist/pesde/luau/roots/src/methods/use-lifecycles.luau deleted file mode 100644 index 3f12341f..00000000 --- a/dist/pesde/luau/roots/src/methods/use-lifecycles.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycles(root: types.Self, lifecycles: { lifecycles.Lifecycle }) - for _, lifecycle in lifecycles do - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - end - return root -end - -return useLifecycles diff --git a/dist/pesde/luau/roots/src/methods/use-module.luau b/dist/pesde/luau/roots/src/methods/use-module.luau deleted file mode 100644 index a96b3d17..00000000 --- a/dist/pesde/luau/roots/src/methods/use-module.luau +++ /dev/null @@ -1,23 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModule(root: types.Self, module: ModuleScript) - local moduleExport = (require)(module) - - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - - return root -end - -return useModule diff --git a/dist/pesde/luau/roots/src/methods/use-modules.luau b/dist/pesde/luau/roots/src/methods/use-modules.luau deleted file mode 100644 index 8354a9d0..00000000 --- a/dist/pesde/luau/roots/src/methods/use-modules.luau +++ /dev/null @@ -1,28 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModules(root: types.Self, modules: { Instance }, predicate: ((module: ModuleScript) -> boolean)?) - for _, module in modules do - if not module:IsA("ModuleScript") or predicate and not predicate(module) then - continue - end - - local moduleExport = (require)(module) - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - end - - return root -end - -return useModules diff --git a/dist/pesde/luau/roots/src/methods/use-provider.luau b/dist/pesde/luau/roots/src/methods/use-provider.luau deleted file mode 100644 index 277d8049..00000000 --- a/dist/pesde/luau/roots/src/methods/use-provider.luau +++ /dev/null @@ -1,14 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProvider(root: types.Self, provider: providers.Provider) - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - return root -end - -return useProvider diff --git a/dist/pesde/luau/roots/src/methods/use-providers.luau b/dist/pesde/luau/roots/src/methods/use-providers.luau deleted file mode 100644 index 1489c3a3..00000000 --- a/dist/pesde/luau/roots/src/methods/use-providers.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProviders(root: types.Self, providers: { providers.Provider }) - for _, provider in providers do - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - end - return root -end - -return useProviders diff --git a/dist/pesde/luau/roots/src/methods/will-finish.luau b/dist/pesde/luau/roots/src/methods/will-finish.luau deleted file mode 100644 index 893088f4..00000000 --- a/dist/pesde/luau/roots/src/methods/will-finish.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willFinish(root: types.Self, callback: () -> ()) - root._finish:register(callback) - return root -end - -return willFinish diff --git a/dist/pesde/luau/roots/src/methods/will-start.luau b/dist/pesde/luau/roots/src/methods/will-start.luau deleted file mode 100644 index 7c3d88c3..00000000 --- a/dist/pesde/luau/roots/src/methods/will-start.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willStart(root: types.Self, callback: () -> ()) - root._start:register(callback) - return root -end - -return willStart diff --git a/dist/pesde/luau/roots/src/types.luau b/dist/pesde/luau/roots/src/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/dist/pesde/luau/roots/src/types.luau +++ /dev/null @@ -1,40 +0,0 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") - -type Set = { [T]: true } - -export type Root = { - type: "Root", - - start: (root: Root) -> StartedRoot, - - useModule: (root: Root, module: ModuleScript) -> Root, - useModules: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useRoot: (root: Root, root: Root) -> Root, - useRoots: (root: Root, roots: { Root }) -> Root, - useProvider: (root: Root, provider: providers.Provider) -> Root, - useProviders: (root: Root, providers: { providers.Provider }) -> Root, - useLifecycle: (root: Root, lifecycle: lifecycles.Lifecycle) -> Root, - useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, - destroy: (root: Root) -> (), - - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, -} - -export type StartedRoot = { - type: "StartedRoot", - - finish: (root: StartedRoot) -> (), -} - -export type Self = Root & { - _destroyed: boolean, - _rootProviders: Set>, - _rootLifecycles: { lifecycles.Lifecycle }, - _subRoots: Set, - _start: lifecycles.Lifecycle<()>, - _finish: lifecycles.Lifecycle<()>, -} - -return nil diff --git a/dist/pesde/luau/runtime/LICENSE.md b/dist/pesde/luau/runtime/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/runtime/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/runtime/pesde.toml b/dist/pesde/luau/runtime/pesde.toml deleted file mode 100644 index dd2cf1bf..00000000 --- a/dist/pesde/luau/runtime/pesde.toml +++ /dev/null @@ -1,21 +0,0 @@ -authors = ["Fire "] -description = "Runtime agnostic libraries for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/runtime" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "luau" -lib = "src/init.luau" -[dependencies] diff --git a/dist/pesde/luau/runtime/src/batteries/threadpool.luau b/dist/pesde/luau/runtime/src/batteries/threadpool.luau deleted file mode 100644 index 6caf08b4..00000000 --- a/dist/pesde/luau/runtime/src/batteries/threadpool.luau +++ /dev/null @@ -1,38 +0,0 @@ -local task = require("../libs/task") - -local freeThreads: { thread } = {} - -local function run(f: (T...) -> (), thread: thread, ...) - f(...) - table.insert(freeThreads, thread) -end - -local function yielder() - while true do - run(coroutine.yield()) - end -end - -local function spawn(f: (T...) -> (), ...: T...) - local thread - if #freeThreads > 0 then - thread = freeThreads[#freeThreads] - freeThreads[#freeThreads] = nil - else - thread = coroutine.create(yielder) - coroutine.resume(thread) - end - - task.spawn(thread, f, thread, ...) -end - -local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args...) - for _, callback in callbacks do - spawn(callback, ...) - end -end - -return table.freeze({ - spawn = spawn, - spawnCallbacks = spawnCallbacks, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/init.luau b/dist/pesde/luau/runtime/src/implementations/init.luau deleted file mode 100644 index 28dbe015..00000000 --- a/dist/pesde/luau/runtime/src/implementations/init.luau +++ /dev/null @@ -1,56 +0,0 @@ -local types = require("@self/../types") - -type Implementation = { new: (() -> T)?, implementation: T? } - -export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune" - -local supportedRuntimes = table.freeze({ - roblox = require("@self/roblox"), - luau = require("@self/luau"), - lune = require("@self/lune"), - lute = require("@self/lute"), - seal = require("@self/seal"), - zune = require("@self/zune"), -}) - -local currentRuntime: types.Runtime = nil -do - for _, runtime in supportedRuntimes :: { [string]: types.Runtime } do - local isRuntime = runtime.is() - if isRuntime then - local currentRuntimePriority = currentRuntime and currentRuntime.priority or 0 - local runtimePriority = runtime.priority or 0 - if currentRuntimePriority <= runtimePriority then - currentRuntime = runtime - end - end - end - assert(currentRuntime, "No supported runtime") -end - -local currentRuntimeName: RuntimeName = currentRuntime.name :: any - -local function notImplemented(functionName: string) - return function() - error(`'{functionName}' is not implemented by runtime '{currentRuntimeName}'`, 2) - end -end - -local function implementFunction(label: string, implementations: { [types.Runtime]: Implementation? }): T - local implementation = implementations[currentRuntime] - if implementation then - if implementation.new then - return implementation.new() - elseif implementation.implementation then - return implementation.implementation - end - end - return notImplemented(label) :: any -end - -return table.freeze({ - supportedRuntimes = supportedRuntimes, - currentRuntime = currentRuntime, - currentRuntimeName = currentRuntimeName, - implementFunction = implementFunction, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/init.spec.luau b/dist/pesde/luau/runtime/src/implementations/init.spec.luau deleted file mode 100644 index 3ce91cbb..00000000 --- a/dist/pesde/luau/runtime/src/implementations/init.spec.luau +++ /dev/null @@ -1,81 +0,0 @@ -local implementations = require("@self/../implementations") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("currentRuntime", function() - test("detects lune runtime", function() - expect(implementations.currentRuntimeName).is("lune") - expect(implementations.currentRuntime).is(implementations.supportedRuntimes.lune) - end) - end) - - describe("implementFunction", function() - test("implements for lune runtime", function() - local lune = function() end - local luau = function() end - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - implementation = lune, - }, - [implementations.supportedRuntimes.luau] = { - implementation = luau, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - end) - - test("constructs for lune runtime", function() - local lune = function() end - local luau = function() end - - local constructedLune = false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - new = function() - constructedLune = true - return lune - end, - }, - [implementations.supportedRuntimes.luau] = { - new = function() - return luau - end, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - expect(constructedLune).is_true() - end) - - test("defaults to not implemented function", function() - local constructSuccess, runSuccess = false, false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.roblox] = { - new = function() - constructSuccess = true - return function() - runSuccess = true - end - end, - }, - }) - - expect(constructSuccess).is(false) - expect(implementation).is_a("function") - expect(implementation).fails_with("'implementation' is not implemented by runtime 'lune'") - expect(runSuccess).is(false) - end) - end) -end diff --git a/dist/pesde/luau/runtime/src/implementations/luau.luau b/dist/pesde/luau/runtime/src/implementations/luau.luau deleted file mode 100644 index c67e52f4..00000000 --- a/dist/pesde/luau/runtime/src/implementations/luau.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "luau", - priority = -1, - is = function() - return true - end, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/lune.luau b/dist/pesde/luau/runtime/src/implementations/lune.luau deleted file mode 100644 index f49834eb..00000000 --- a/dist/pesde/luau/runtime/src/implementations/lune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local LUNE_VERSION_FORMAT = "(Lune) (%d+%.%d+%.%d+.*)+(%d+)" - -return types.Runtime({ - name = "lune", - is = function() - return string.match(_VERSION, LUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/lute.luau b/dist/pesde/luau/runtime/src/implementations/lute.luau deleted file mode 100644 index 7b6abc58..00000000 --- a/dist/pesde/luau/runtime/src/implementations/lute.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "lute", - is = function() - return false - end, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/roblox.luau b/dist/pesde/luau/runtime/src/implementations/roblox.luau deleted file mode 100644 index 91a780e2..00000000 --- a/dist/pesde/luau/runtime/src/implementations/roblox.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "roblox", - is = function() - -- wtf - return not not (_VERSION == "Luau" and game and workspace) - end, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/seal.luau b/dist/pesde/luau/runtime/src/implementations/seal.luau deleted file mode 100644 index 0a72684c..00000000 --- a/dist/pesde/luau/runtime/src/implementations/seal.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "seal", - is = function() - return false - end, -}) diff --git a/dist/pesde/luau/runtime/src/implementations/zune.luau b/dist/pesde/luau/runtime/src/implementations/zune.luau deleted file mode 100644 index 48243e05..00000000 --- a/dist/pesde/luau/runtime/src/implementations/zune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local ZUNE_VERSION_FORMAT = "(Zune) (%d+%.%d+%.%d+.*)+(%d+%.%d+)" - -return types.Runtime({ - name = "zune", - is = function() - return string.match(_VERSION, ZUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/luau/runtime/src/index.d.ts b/dist/pesde/luau/runtime/src/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/dist/pesde/luau/runtime/src/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/dist/pesde/luau/runtime/src/init.luau b/dist/pesde/luau/runtime/src/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/dist/pesde/luau/runtime/src/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/dist/pesde/luau/runtime/src/libs/task.luau b/dist/pesde/luau/runtime/src/libs/task.luau deleted file mode 100644 index 28c1ac9e..00000000 --- a/dist/pesde/luau/runtime/src/libs/task.luau +++ /dev/null @@ -1,157 +0,0 @@ -local implementations = require("../implementations") - -export type TaskLib = { - cancel: (thread) -> (), - defer: (functionOrThread: thread | (T...) -> (), T...) -> thread, - delay: (duration: number, functionOrThread: thread | (T...) -> (), T...) -> thread, - spawn: (functionOrThread: thread | (T...) -> (), T...) -> thread, - wait: (duration: number?) -> number, -} - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function defaultSpawn(functionOrThread: thread | (T...) -> (), ...: T...): thread - if type(functionOrThread) == "thread" then - coroutine.resume(functionOrThread, ...) - return functionOrThread - else - local thread = coroutine.create(functionOrThread) - coroutine.resume(thread, ...) - return thread - end -end - -local function defaultWait(seconds: number?) - local startTime = os.clock() - local endTime = startTime + (seconds or 1) - local clockTime: number - repeat - clockTime = os.clock() - until clockTime >= endTime - return clockTime - startTime -end - -local task: TaskLib = table.freeze({ - cancel = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.cancel - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").cancel - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").cancel - end, - }, - [supportedRuntimes.luau] = { - implementation = function(thread) - if not coroutine.close(thread) then - error(debug.traceback(thread, "Could not cancel thread")) - end - end, - }, - }), - defer = implementFunction("task.defer", { - [supportedRuntimes.roblox] = { - new = function() - return task.defer :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").defer - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").defer - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - delay = implementFunction("task.delay", { - [supportedRuntimes.roblox] = { - new = function() - return task.delay :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").delay - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").delay - end, - }, - [supportedRuntimes.luau] = { - implementation = function(duration: number, functionOrThread: thread | (T...) -> (), ...: T...): thread - return defaultSpawn( - if typeof(functionOrThread) == "function" - then function(duration, functionOrThread, ...) - defaultWait(duration) - functionOrThread(...) - end - else function(duration, functionOrThread, ...) - defaultWait(duration) - coroutine.resume(...) - end, - duration, - functionOrThread, - ... - ) - end, - }, - }), - spawn = implementFunction("task.spawn", { - [supportedRuntimes.roblox] = { - new = function() - return task.spawn :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").spawn - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").spawn - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - wait = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.wait - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").wait - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").wait - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultWait, - }, - }), -}) - -return task diff --git a/dist/pesde/luau/runtime/src/libs/task.spec.luau b/dist/pesde/luau/runtime/src/libs/task.spec.luau deleted file mode 100644 index 0918e87f..00000000 --- a/dist/pesde/luau/runtime/src/libs/task.spec.luau +++ /dev/null @@ -1,62 +0,0 @@ -local luneTask = require("@lune/task") -local task = require("./task") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - --- FIXME: can't async stuff lol -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("task", function() - test("spawn", function() - expect(task.spawn).is(luneTask.spawn) - local spawned = false - - task.spawn(function() - spawned = true - end) - - expect(spawned).is_true() - end) - - test("defer", function() - expect(task.defer).is(luneTask.defer) - - -- local spawned = false - - -- task.defer(function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - end) - - test("delay", function() - expect(task.delay).is(luneTask.delay) - -- local spawned = false - - -- task.delay(0.25, function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - - -- local startTime = os.clock() - -- repeat - -- until os.clock() - startTime > 0.5 - - -- print(spawned) - - -- expect(spawned).is_true() - end) - - test("wait", function() - expect(task.wait).is(luneTask.wait) - end) - - test("cancel", function() - expect(task.cancel).is(luneTask.cancel) - end) - end) -end diff --git a/dist/pesde/luau/runtime/src/libs/warn.luau b/dist/pesde/luau/runtime/src/libs/warn.luau deleted file mode 100644 index 6a4837ac..00000000 --- a/dist/pesde/luau/runtime/src/libs/warn.luau +++ /dev/null @@ -1,27 +0,0 @@ -local implementations = require("../implementations") - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function tostringTuple(...: any) - local stringified = {} - for index = 1, select("#", ...) do - table.insert(stringified, tostring(select(index, ...))) - end - return table.concat(stringified, " ") -end - -local warn: (T...) -> () = implementFunction("warn", { - [supportedRuntimes.roblox] = { - new = function() - return warn - end, - }, - [supportedRuntimes.luau] = { - implementation = function(...: T...) - print(`\27[0;33m{tostringTuple(...)}\27[0m`) - end, - }, -}) - -return warn diff --git a/dist/pesde/luau/runtime/src/types.luau b/dist/pesde/luau/runtime/src/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/dist/pesde/luau/runtime/src/types.luau +++ /dev/null @@ -1,13 +0,0 @@ -export type Runtime = { - name: string, - priority: number?, - is: () -> boolean, -} - -local function Runtime(x: Runtime) - return table.freeze(x) -end - -return table.freeze({ - Runtime = Runtime, -}) diff --git a/dist/pesde/luau/typecheckers/LICENSE.md b/dist/pesde/luau/typecheckers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/luau/typecheckers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/luau/typecheckers/pesde.toml b/dist/pesde/luau/typecheckers/pesde.toml deleted file mode 100644 index b8c44395..00000000 --- a/dist/pesde/luau/typecheckers/pesde.toml +++ /dev/null @@ -1,21 +0,0 @@ -authors = ["Fire "] -description = "Typechecking primitives and compatibility for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/typecheckers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "luau" -lib = "src/init.luau" -[dependencies] diff --git a/dist/pesde/luau/typecheckers/src/init.luau b/dist/pesde/luau/typecheckers/src/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/pesde/lune/dependencies/LICENSE.md b/dist/pesde/lune/dependencies/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/dependencies/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/dependencies/lifecycles.luau b/dist/pesde/lune/dependencies/lifecycles.luau deleted file mode 100644 index 49a51bfa..00000000 --- a/dist/pesde/lune/dependencies/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/lune/dependencies/logger.luau b/dist/pesde/lune/dependencies/logger.luau deleted file mode 100644 index ddbd462d..00000000 --- a/dist/pesde/lune/dependencies/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./lune_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/lune/dependencies/pesde.toml b/dist/pesde/lune/dependencies/pesde.toml deleted file mode 100644 index effecf44..00000000 --- a/dist/pesde/lune/dependencies/pesde.toml +++ /dev/null @@ -1,33 +0,0 @@ -authors = ["Fire "] -description = "Dependency resolution logic for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/dependencies" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "lifecycles.luau", - "logger.luau", - "lifecycles.luau", - "logger.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/dependencies/src/depend.luau b/dist/pesde/lune/dependencies/src/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/dist/pesde/lune/dependencies/src/depend.luau +++ /dev/null @@ -1,30 +0,0 @@ -local logger = require("./logger") -local types = require("./types") - -local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) -end - -local unresolvedMt = { - __metatable = "This metatable is locked.", - __index = useBeforeConstructed, - __newindex = useBeforeConstructed, -} - -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end - --- Wtf luau -local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( - (nil :: any) :: Dependencies, - ... -)) - -- Return a mock value that will be resolved during dependency resolution. - return setmetatable({ - type = "UnresolvedDependency", - dependency = dependency, - }, unresolvedMt) :: any -end - -return depend diff --git a/dist/pesde/lune/dependencies/src/index.d.ts b/dist/pesde/lune/dependencies/src/index.d.ts deleted file mode 100644 index a5bddcde..00000000 --- a/dist/pesde/lune/dependencies/src/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "../lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/dist/pesde/lune/dependencies/src/init.luau b/dist/pesde/lune/dependencies/src/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/dist/pesde/lune/dependencies/src/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/dist/pesde/lune/dependencies/src/logger.luau b/dist/pesde/lune/dependencies/src/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/dist/pesde/lune/dependencies/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { - useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/pesde/lune/dependencies/src/process-dependencies.luau b/dist/pesde/lune/dependencies/src/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/dist/pesde/lune/dependencies/src/process-dependencies.luau +++ /dev/null @@ -1,57 +0,0 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") - -export type ProccessDependencyResult = { - sortedDependencies: { types.Dependency }, - lifecycles: { lifecycles.Lifecycle }, -} - -type Set = { [T]: true } - -local function processDependencies(dependencies: Set>): ProccessDependencyResult - local sortedDependencies = {} - local lifecycles = {} - - -- TODO: optimize ts - local function visitDependency(dependency: types.Dependency) - -- print("Visiting dependency", dependency) - - for key, value in dependency :: any do - if key == "dependencies" then - -- print("Checking [prvd.dependencies]") - if typeof(value) == "table" then - for key, value in value do - -- print("Checking key", key, "value", value) - if typeof(value) == "table" and value.type == "UnresolvedDependency" then - local unresolved: types.UnresolvedDependency = value - -- print("Got unresolved dependency", unresolved.dependency, "visiting") - visitDependency(unresolved.dependency) - end - end - end - - continue - end - - if typeof(value) == "table" and value.type == "Lifecycle" and not table.find(lifecycles, value) then - table.insert(lifecycles, value) - end - end - - if dependencies[dependency] and not table.find(sortedDependencies, dependency) then - -- print("Pushing to sort") - table.insert(sortedDependencies, dependency) - end - end - - for dependency in dependencies do - visitDependency(dependency) - end - - return { - sortedDependencies = sortedDependencies, - lifecycles = lifecycles, - } -end - -return processDependencies diff --git a/dist/pesde/lune/dependencies/src/process-dependencies.spec.luau b/dist/pesde/lune/dependencies/src/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/dist/pesde/lune/dependencies/src/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/dist/pesde/lune/dependencies/src/sort-by-priority.luau b/dist/pesde/lune/dependencies/src/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/dist/pesde/lune/dependencies/src/sort-by-priority.luau +++ /dev/null @@ -1,14 +0,0 @@ -local types = require("./types") - -local function sortByPriority(dependencies: { types.Dependency }) - table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end - local leftIndex = table.find(dependencies, left) - local rightIndex = table.find(dependencies, right) - return leftIndex < rightIndex - end) -end - -return sortByPriority diff --git a/dist/pesde/lune/dependencies/src/sort-by-priority.spec.luau b/dist/pesde/lune/dependencies/src/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/dist/pesde/lune/dependencies/src/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/dist/pesde/lune/dependencies/src/types.luau b/dist/pesde/lune/dependencies/src/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/dist/pesde/lune/dependencies/src/types.luau +++ /dev/null @@ -1,14 +0,0 @@ -export type Dependency = Self & { - dependencies: Dependencies, - priority: number?, - new: (dependencies: Dependencies, NewArgs...) -> Dependency, -} - -export type UnresolvedDependency = { - type: "UnresolvedDependency", - dependency: Dependency, -} - -export type dependencies = { __prvdmwrong_dependencies: never } - -return nil diff --git a/dist/pesde/lune/lifecycles/LICENSE.md b/dist/pesde/lune/lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/lifecycles/logger.luau b/dist/pesde/lune/lifecycles/logger.luau deleted file mode 100644 index ddbd462d..00000000 --- a/dist/pesde/lune/lifecycles/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./lune_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/lune/lifecycles/pesde.toml b/dist/pesde/lune/lifecycles/pesde.toml deleted file mode 100644 index aff7cd1e..00000000 --- a/dist/pesde/lune/lifecycles/pesde.toml +++ /dev/null @@ -1,33 +0,0 @@ -authors = ["Fire "] -description = "Provider method lifecycles implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/lifecycles" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "runtime.luau", - "logger.luau", - "runtime.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/lifecycles/runtime.luau b/dist/pesde/lune/lifecycles/runtime.luau deleted file mode 100644 index 8e63a7a0..00000000 --- a/dist/pesde/lune/lifecycles/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/lune/lifecycles/src/handlers/fire-concurrent.luau b/dist/pesde/lune/lifecycles/src/handlers/fire-concurrent.luau deleted file mode 100644 index f279b888..00000000 --- a/dist/pesde/lune/lifecycles/src/handlers/fire-concurrent.luau +++ /dev/null @@ -1,10 +0,0 @@ -local runtime = require("../../runtime") -local types = require("../types") - -local function fireConcurrent(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - runtime.threadpool.spawn(callback, ...) - end -end - -return fireConcurrent diff --git a/dist/pesde/lune/lifecycles/src/handlers/fire-sequential.luau b/dist/pesde/lune/lifecycles/src/handlers/fire-sequential.luau deleted file mode 100644 index 80911ad9..00000000 --- a/dist/pesde/lune/lifecycles/src/handlers/fire-sequential.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -local function fireSequential(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - callback(...) - end -end - -return fireSequential diff --git a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-constructed.luau b/dist/pesde/lune/lifecycles/src/hooks/lifecycle-constructed.luau deleted file mode 100644 index 8ea4d81b..00000000 --- a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-constructed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleConstructed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleConstructed = onLifecycleConstructed, -}) diff --git a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-destroyed.luau b/dist/pesde/lune/lifecycles/src/hooks/lifecycle-destroyed.luau deleted file mode 100644 index 47abcfab..00000000 --- a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleDestroyed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleDestroyed = onLifecycleDestroyed, -}) diff --git a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-registered.luau b/dist/pesde/lune/lifecycles/src/hooks/lifecycle-registered.luau deleted file mode 100644 index fab588a3..00000000 --- a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-registered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleRegistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleRegistered = onLifecycleRegistered, -}) diff --git a/dist/pesde/lune/lifecycles/src/index.d.ts b/dist/pesde/lune/lifecycles/src/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/dist/pesde/lune/lifecycles/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/dist/pesde/lune/lifecycles/src/init.luau b/dist/pesde/lune/lifecycles/src/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/dist/pesde/lune/lifecycles/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/dist/pesde/lune/lifecycles/src/logger.luau b/dist/pesde/lune/lifecycles/src/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/dist/pesde/lune/lifecycles/src/logger.luau +++ /dev/null @@ -1,6 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { - useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", -}) diff --git a/dist/pesde/lune/lifecycles/src/method-to-lifecycles.luau b/dist/pesde/lune/lifecycles/src/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/dist/pesde/lune/lifecycles/src/method-to-lifecycles.luau +++ /dev/null @@ -1,5 +0,0 @@ -local types = require("./types") - -local methodToLifecycles: { [string]: { types.Lifecycle } } = {} - -return methodToLifecycles diff --git a/dist/pesde/lune/lifecycles/src/methods/await.luau b/dist/pesde/lune/lifecycles/src/methods/await.luau deleted file mode 100644 index ed8299d6..00000000 --- a/dist/pesde/lune/lifecycles/src/methods/await.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function await(lifecycle: types.Self): Args... - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local currentThread = coroutine.running() - local function callback(...: Args...) - lifecycle:unregister(callback) - coroutine.resume(currentThread, ...) - end - lifecycle:register(callback) - return coroutine.yield() -end - -return await diff --git a/dist/pesde/lune/lifecycles/src/methods/destroy.luau b/dist/pesde/lune/lifecycles/src/methods/destroy.luau deleted file mode 100644 index d9d5d6cc..00000000 --- a/dist/pesde/lune/lifecycles/src/methods/destroy.luau +++ /dev/null @@ -1,18 +0,0 @@ -local lifecycleDestroyed = require("../hooks/lifecycle-destroyed") -local logger = require("../logger") -local methodToLifecycles = require("../method-to-lifecycles") -local types = require("../types") - -local function destroy(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - table.remove(methodToLifecycles[lifecycle.method], table.find(methodToLifecycles[lifecycle.method], lifecycle)) - table.clear(lifecycle.callbacks) - for _, callback in lifecycleDestroyed.callbacks do - callback(lifecycle) - end - lifecycle._isDestroyed = true -end - -return destroy diff --git a/dist/pesde/lune/lifecycles/src/methods/on-registered.luau b/dist/pesde/lune/lifecycles/src/methods/on-registered.luau deleted file mode 100644 index 7ddb009a..00000000 --- a/dist/pesde/lune/lifecycles/src/methods/on-registered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onRegistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end - table.insert(lifecycle._selfRegistered, listener) - return function() - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end -end - -return onRegistered diff --git a/dist/pesde/lune/lifecycles/src/methods/register.luau b/dist/pesde/lune/lifecycles/src/methods/register.luau deleted file mode 100644 index 3fd74d56..00000000 --- a/dist/pesde/lune/lifecycles/src/methods/register.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function register(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle.callbacks, table.find(lifecycle.callbacks, callback)) - end - table.insert(lifecycle.callbacks, callback) - threadpool.spawnCallbacks(lifecycle._selfRegistered, callback) -end - -return register diff --git a/dist/pesde/lune/lifecycles/src/methods/unregister-all.luau b/dist/pesde/lune/lifecycles/src/methods/unregister-all.luau deleted file mode 100644 index 5e6235af..00000000 --- a/dist/pesde/lune/lifecycles/src/methods/unregister-all.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function clear(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - for _, callback in lifecycle.callbacks do - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end - table.clear(lifecycle.callbacks) -end - -return clear diff --git a/dist/pesde/lune/lifecycles/src/types.luau b/dist/pesde/lune/lifecycles/src/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/dist/pesde/lune/lifecycles/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Lifecycle = { - type: "Lifecycle", - - callbacks: { (Args...) -> () }, - method: string, - - register: (self: Lifecycle, callback: (Args...) -> ()) -> (), - fire: (self: Lifecycle, Args...) -> (), - unregister: (self: Lifecycle, callback: (Args...) -> ()) -> (), - clear: (self: Lifecycle) -> (), - onRegistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - onUnregistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - await: (self: Lifecycle) -> Args..., - destroy: (self: Lifecycle) -> (), -} - -export type Self = Lifecycle & { - _isDestroyed: boolean, - _selfRegistered: { (callback: (Args...) -> ()) -> () }, - _selfUnregistered: { (callback: (Args...) -> ()) -> () }, -} - -return nil diff --git a/dist/pesde/lune/logger/LICENSE.md b/dist/pesde/lune/logger/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/logger/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/logger/pesde.toml b/dist/pesde/lune/logger/pesde.toml deleted file mode 100644 index 1044b58b..00000000 --- a/dist/pesde/lune/logger/pesde.toml +++ /dev/null @@ -1,28 +0,0 @@ -authors = ["Fire "] -description = "Logging for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/logger" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", - "runtime.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/logger/runtime.luau b/dist/pesde/lune/logger/runtime.luau deleted file mode 100644 index 8e63a7a0..00000000 --- a/dist/pesde/lune/logger/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/lune/logger/src/allow-web-links.luau b/dist/pesde/lune/logger/src/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/dist/pesde/lune/logger/src/allow-web-links.luau +++ /dev/null @@ -1,5 +0,0 @@ -local runtime = require("../runtime") - -local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true - -return allowWebLinks diff --git a/dist/pesde/lune/logger/src/create.luau b/dist/pesde/lune/logger/src/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/dist/pesde/lune/logger/src/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/dist/pesde/lune/logger/src/index.d.ts b/dist/pesde/lune/logger/src/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/dist/pesde/lune/logger/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/dist/pesde/lune/logger/src/init.luau b/dist/pesde/lune/logger/src/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/dist/pesde/lune/logger/src/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/dist/pesde/lune/logger/src/parse-error.luau b/dist/pesde/lune/logger/src/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/dist/pesde/lune/logger/src/parse-error.luau +++ /dev/null @@ -1,12 +0,0 @@ -local types = require("./types") - -local function parseError(err: string): types.Error - return { - type = "Error", - raw = err, - message = err:gsub("^.+:%d+:%s*", ""), - trace = debug.traceback(nil, 2), - } -end - -return parseError diff --git a/dist/pesde/lune/logger/src/standard-error-info-url.luau b/dist/pesde/lune/logger/src/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/dist/pesde/lune/logger/src/standard-error-info-url.luau +++ /dev/null @@ -1,5 +0,0 @@ -local function standardErrorInfoUrl(label: string): string - return `https://prvdmwrong.luau.page/api-reference/{label}/errors` -end - -return standardErrorInfoUrl diff --git a/dist/pesde/lune/logger/src/types.luau b/dist/pesde/lune/logger/src/types.luau deleted file mode 100644 index d1699037..00000000 --- a/dist/pesde/lune/logger/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Error = { - type: "Error", - raw: string, - message: string, - trace: string, -} - -export type Log = { - template: string, - error: Error?, - trace: string?, - [number]: unknown, -} - -export type Logger = Templates & { - type: "Logger", - print: (self: Logger, props: Log) -> (), - warn: (self: Logger, props: Log) -> (), - error: (self: Logger, props: Log) -> (), - fatalError: (self: Logger, props: Log) -> never, -} - -return nil diff --git a/dist/pesde/lune/providers/LICENSE.md b/dist/pesde/lune/providers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/providers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/providers/dependencies.luau b/dist/pesde/lune/providers/dependencies.luau deleted file mode 100644 index e232e1f0..00000000 --- a/dist/pesde/lune/providers/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/lune/providers/lifecycles.luau b/dist/pesde/lune/providers/lifecycles.luau deleted file mode 100644 index 49a51bfa..00000000 --- a/dist/pesde/lune/providers/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/lune/providers/logger.luau b/dist/pesde/lune/providers/logger.luau deleted file mode 100644 index ddbd462d..00000000 --- a/dist/pesde/lune/providers/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./lune_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/lune/providers/pesde.toml b/dist/pesde/lune/providers/pesde.toml deleted file mode 100644 index 935d5c92..00000000 --- a/dist/pesde/lune/providers/pesde.toml +++ /dev/null @@ -1,43 +0,0 @@ -authors = ["Fire "] -description = "Provider creation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/providers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/providers/runtime.luau b/dist/pesde/lune/providers/runtime.luau deleted file mode 100644 index 8e63a7a0..00000000 --- a/dist/pesde/lune/providers/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/lune/providers/src/create.luau b/dist/pesde/lune/providers/src/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/dist/pesde/lune/providers/src/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/dist/pesde/lune/providers/src/index.d.ts b/dist/pesde/lune/providers/src/index.d.ts deleted file mode 100644 index 2ab36e15..00000000 --- a/dist/pesde/lune/providers/src/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "../dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/dist/pesde/lune/providers/src/init.luau b/dist/pesde/lune/providers/src/init.luau deleted file mode 100644 index d678d850..00000000 --- a/dist/pesde/lune/providers/src/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/dist/pesde/lune/providers/src/name-of.luau b/dist/pesde/lune/providers/src/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/dist/pesde/lune/providers/src/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/dist/pesde/lune/providers/src/provider-classes.luau b/dist/pesde/lune/providers/src/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/dist/pesde/lune/providers/src/provider-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local providerClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return providerClasses diff --git a/dist/pesde/lune/providers/src/types.luau b/dist/pesde/lune/providers/src/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/dist/pesde/lune/providers/src/types.luau +++ /dev/null @@ -1,12 +0,0 @@ -local dependencies = require("../dependencies") - -export type Provider = dependencies.Dependency, - __tostring: (self: Provider) -> string, - name: string?, - constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, -}, Dependencies> - -return nil diff --git a/dist/pesde/lune/prvdmwrong/LICENSE.md b/dist/pesde/lune/prvdmwrong/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/prvdmwrong/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/prvdmwrong/dependencies.luau b/dist/pesde/lune/prvdmwrong/dependencies.luau deleted file mode 100644 index e232e1f0..00000000 --- a/dist/pesde/lune/prvdmwrong/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/lune/prvdmwrong/lifecycles.luau b/dist/pesde/lune/prvdmwrong/lifecycles.luau deleted file mode 100644 index 49a51bfa..00000000 --- a/dist/pesde/lune/prvdmwrong/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/lune/prvdmwrong/pesde.toml b/dist/pesde/lune/prvdmwrong/pesde.toml deleted file mode 100644 index bbfecebb..00000000 --- a/dist/pesde/lune/prvdmwrong/pesde.toml +++ /dev/null @@ -1,43 +0,0 @@ -authors = ["Fire "] -description = "Entry point to Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/prvdmwrong" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/prvdmwrong/providers.luau b/dist/pesde/lune/prvdmwrong/providers.luau deleted file mode 100644 index 5539dc07..00000000 --- a/dist/pesde/lune/prvdmwrong/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/lune/prvdmwrong/roots.luau b/dist/pesde/lune/prvdmwrong/roots.luau deleted file mode 100644 index 76ed284a..00000000 --- a/dist/pesde/lune/prvdmwrong/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./lune_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/lune/prvdmwrong/src/index.d.ts b/dist/pesde/lune/prvdmwrong/src/index.d.ts deleted file mode 100644 index 2058129c..00000000 --- a/dist/pesde/lune/prvdmwrong/src/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "../dependencies"; -import lifecycles from "../lifecycles"; -import providers from "../providers"; -import roots from "../roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/dist/pesde/lune/rbx-components/LICENSE.md b/dist/pesde/lune/rbx-components/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/rbx-components/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/rbx-components/dependencies.luau b/dist/pesde/lune/rbx-components/dependencies.luau deleted file mode 100644 index e232e1f0..00000000 --- a/dist/pesde/lune/rbx-components/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/lune/rbx-components/logger.luau b/dist/pesde/lune/rbx-components/logger.luau deleted file mode 100644 index ddbd462d..00000000 --- a/dist/pesde/lune/rbx-components/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./lune_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/lune/rbx-components/pesde.toml b/dist/pesde/lune/rbx-components/pesde.toml deleted file mode 100644 index c7f1dcf0..00000000 --- a/dist/pesde/lune/rbx-components/pesde.toml +++ /dev/null @@ -1,43 +0,0 @@ -authors = ["Fire "] -description = "Component functionality for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/rbx_components" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/rbx-components/providers.luau b/dist/pesde/lune/rbx-components/providers.luau deleted file mode 100644 index 5539dc07..00000000 --- a/dist/pesde/lune/rbx-components/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/lune/rbx-components/roots.luau b/dist/pesde/lune/rbx-components/roots.luau deleted file mode 100644 index 76ed284a..00000000 --- a/dist/pesde/lune/rbx-components/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./lune_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/lune/rbx-components/src/component-provider.luau b/dist/pesde/lune/rbx-components/src/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/dist/pesde/lune/rbx-components/src/component-provider.luau +++ /dev/null @@ -1,185 +0,0 @@ -local CollectionService = game:GetService("CollectionService") - -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") - -local threadpool = runtime.threadpool - -type Set = { [T]: true } -type ConstructedComponent = types.AnyComponent -type LuauBug = any - -local ComponentProvider = {} -ComponentProvider.priority = -math.huge -ComponentProvider.name = "@rbx-components" - -function ComponentProvider.constructor(self: ComponentProvider) - self.componentClasses = {} :: Set - self.tagToComponentClasses = {} :: { [string]: Set } - self.instanceToComponents = {} :: { [Instance]: { [types.AnyComponent]: ConstructedComponent } } - self.componentToInstances = {} :: { [types.AnyComponent]: Set? } - self.constructedToClass = {} :: { [ConstructedComponent]: types.AnyComponent? } - - self._destroyingConnections = {} :: { [Instance]: RBXScriptConnection } - self._connections = {} :: { RBXScriptConnection } -end - -function ComponentProvider.start(self: ComponentProvider) - for tag, components in self.tagToComponentClasses do - local function onTagAdded(instance) - local instanceToComponents = self.instanceToComponents[instance] - if not instanceToComponents then - instanceToComponents = {} - self.instanceToComponents[instance] = instanceToComponents - end - - for componentClass in components do - if - (componentClass.blacklistInstances and (componentClass.blacklistInstances :: LuauBug)[instance]) - or (componentClass.whitelistInstances and not (componentClass.whitelistInstances :: LuauBug)[instance]) - or (componentClass.instanceCheck and not componentClass.instanceCheck(instance)) - then - continue - end - - local component: ConstructedComponent = instanceToComponents[componentClass] - if not component then - component = componentClass.new(instance) - instanceToComponents[componentClass] = component - self.constructedToClass[component :: any] = componentClass - end - - if component.added then - component:added() - end - end - - if not self._destroyingConnections[instance] then - self._destroyingConnections[instance] = instance.Destroying:Once(function() - for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end - end - table.clear(instanceToComponents) - self.instanceToComponents[instance] = nil - end) - end - end - - table.insert(self._connections, CollectionService:GetInstanceAddedSignal(tag):Connect(onTagAdded)) - table.insert(self._connections, CollectionService:GetInstanceRemovedSignal(tag):Connect(function(instance) end)) - - for _, instance in CollectionService:GetTagged(tag) do - onTagAdded(instance) - end - end -end - -function ComponentProvider.destroy(self: ComponentProvider) - for _, components in self.instanceToComponents do - for _, component in components do - if component.destroy then - component:destroy() - end - end - table.clear(components) - end - - table.clear(self.componentClasses) - table.clear(self.tagToComponentClasses) - table.clear(self.instanceToComponents) - table.clear(self.componentToInstances) - table.clear(self.constructedToClass) - - for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end - end - - for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end - end - - table.clear(self._connections) - table.clear(self._destroyingConnections) -end - -function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end - - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end - - if class.tag then - local tagToComponentClasses = self.tagToComponentClasses[class.tag] - - if tagToComponentClasses then - if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) - end - else - tagToComponentClasses = {} - self.tagToComponentClasses[class.tag] = tagToComponentClasses - end - - (tagToComponentClasses :: any)[class] = true - end - - self.componentClasses[class] = true - self.componentToInstances[class] = {} -end - -function ComponentProvider.getFromInstance( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - return self.instanceToComponents[instance :: any][class] -end - -function ComponentProvider.getAllComponents( - self: ComponentProvider, - class: types.Component -): Set> - local result = {} - for _, components in self.instanceToComponents do - for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end - end - end - return result :: any -end - -function ComponentProvider.addComponent( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - error("not yet implemented") -end - -function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) - local constructed = self:getFromInstance(class, instance) - if constructed then - self.instanceToComponents[instance :: any][class] = nil - - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end - end -end - -export type ComponentProvider = typeof(ComponentProvider) -return providers.create(ComponentProvider) diff --git a/dist/pesde/lune/rbx-components/src/extend-root/init.luau b/dist/pesde/lune/rbx-components/src/extend-root/init.luau deleted file mode 100644 index 6e9f0578..00000000 --- a/dist/pesde/lune/rbx-components/src/extend-root/init.luau +++ /dev/null @@ -1,30 +0,0 @@ -local ComponentProvider = require("./component-provider") -local createComponentClassProvider = require("@self/create-component-class-provider") -local logger = require("./logger") -local roots = require("../roots") -local types = require("./types") -local useComponent = require("@self/use-component") -local useComponents = require("@self/use-components") -local useModuleAsComponent = require("@self/use-module-as-component") -local useModulesAsComponents = require("@self/use-modules-as-components") - -local function extendRoot(root: types.RootPrivate): types.Root - if root._hasComponentExtensions then - return logger:fatalError({ template = logger.alreadyExtendedRoot }) - end - - root._hasComponentExtensions = true - root._classes = {} - - root:useProvider(ComponentProvider) - root:useProvider(createComponentClassProvider(root._classes)) - - root.useComponent = useComponent :: any - root.useComponents = useComponents :: any - root.useModuleAsComponent = useModuleAsComponent :: any - root.useModulesAsComponents = useModulesAsComponents :: any - - return root -end - -return extendRoot :: (root: roots.Root) -> types.Root diff --git a/dist/pesde/lune/rbx-components/src/extend-root/use-modules-as-components.luau b/dist/pesde/lune/rbx-components/src/extend-root/use-modules-as-components.luau deleted file mode 100644 index bababafa..00000000 --- a/dist/pesde/lune/rbx-components/src/extend-root/use-modules-as-components.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModulesAsComponents( - root: types.RootPrivate, - modules: { Instance }, - predicate: ((ModuleScript) -> boolean)? -) - for index = 1, #modules do - local module = modules[index] - - if not module:IsA("ModuleScript") then - continue - end - - if predicate and not predicate(module) then - continue - end - - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - end - return root -end - -return useModulesAsComponents diff --git a/dist/pesde/lune/rbx-components/src/init.luau b/dist/pesde/lune/rbx-components/src/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/dist/pesde/lune/rbx-components/src/init.luau +++ /dev/null @@ -1,24 +0,0 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") - -export type Component = types.Component -export type Root = types.Root - -local components = { - create = create, - extendRoot = extendRoot, - _ = table.freeze({ - componentClasses = componentClasses, - }), -} - -local mt = {} - -function mt.__call(_, component: Self): types.Component - return create(component) -end - -table.freeze(mt) -return table.freeze(setmetatable(components, mt)) diff --git a/dist/pesde/lune/rbx-components/src/types.luau b/dist/pesde/lune/rbx-components/src/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/dist/pesde/lune/rbx-components/src/types.luau +++ /dev/null @@ -1,30 +0,0 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") - -export type Component = dependencies.Dependency, - tag: string?, - instanceCheck: (unknown) -> boolean, - blacklistInstances: { Instance }?, - whitelistInstances: { Instance }?, - constructor: (self: Component, instance: Instance) -> ()?, - added: (self: Component) -> ()?, - removed: (self: Component) -> ()?, - destroyed: (self: Component) -> ()?, -}, nil, Instance> - -export type Root = roots.Root & { - useModuleAsComponent: (root: Root, module: ModuleScript) -> Root, - useModulesAsComponents: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useComponent: (root: Root, component: Component) -> Root, - useComponents: (root: Root, components: { Component }) -> Root, -} - -export type RootPrivate = Root & { - _hasComponentExtensions: true?, - _classes: { Component }, -} - -export type AnyComponent = Component - -return nil diff --git a/dist/pesde/lune/roots/LICENSE.md b/dist/pesde/lune/roots/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/roots/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/roots/dependencies.luau b/dist/pesde/lune/roots/dependencies.luau deleted file mode 100644 index e232e1f0..00000000 --- a/dist/pesde/lune/roots/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/lune/roots/lifecycles.luau b/dist/pesde/lune/roots/lifecycles.luau deleted file mode 100644 index 49a51bfa..00000000 --- a/dist/pesde/lune/roots/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/lune/roots/logger.luau b/dist/pesde/lune/roots/logger.luau deleted file mode 100644 index ddbd462d..00000000 --- a/dist/pesde/lune/roots/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./lune_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/lune/roots/pesde.toml b/dist/pesde/lune/roots/pesde.toml deleted file mode 100644 index fa2c83c7..00000000 --- a/dist/pesde/lune/roots/pesde.toml +++ /dev/null @@ -1,48 +0,0 @@ -authors = ["Fire "] -description = "Roots implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/roots" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -environment = "lune" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } diff --git a/dist/pesde/lune/roots/providers.luau b/dist/pesde/lune/roots/providers.luau deleted file mode 100644 index 5539dc07..00000000 --- a/dist/pesde/lune/roots/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/lune/roots/runtime.luau b/dist/pesde/lune/roots/runtime.luau deleted file mode 100644 index 8e63a7a0..00000000 --- a/dist/pesde/lune/roots/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./lune_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/lune/roots/src/create.luau b/dist/pesde/lune/roots/src/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/dist/pesde/lune/roots/src/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/dist/pesde/lune/roots/src/hooks/root-destroyed.luau b/dist/pesde/lune/roots/src/hooks/root-destroyed.luau deleted file mode 100644 index 10b79b54..00000000 --- a/dist/pesde/lune/roots/src/hooks/root-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootDestroyed(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootDestroyed = onRootDestroyed, -}) diff --git a/dist/pesde/lune/roots/src/hooks/root-finished.luau b/dist/pesde/lune/roots/src/hooks/root-finished.luau deleted file mode 100644 index d3519cea..00000000 --- a/dist/pesde/lune/roots/src/hooks/root-finished.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootFinished(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootFinished = onRootFinished, -}) diff --git a/dist/pesde/lune/roots/src/hooks/root-started.luau b/dist/pesde/lune/roots/src/hooks/root-started.luau deleted file mode 100644 index 2ae6f90c..00000000 --- a/dist/pesde/lune/roots/src/hooks/root-started.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootStarted(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootStarted = onRootStarted, -}) diff --git a/dist/pesde/lune/roots/src/hooks/root-used.luau b/dist/pesde/lune/roots/src/hooks/root-used.luau deleted file mode 100644 index 71f172cc..00000000 --- a/dist/pesde/lune/roots/src/hooks/root-used.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self, subRoot: types.Root) -> () } = {} - -local function onRootUsed(listener: (root: types.Root, subRoot: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootUsed = onRootUsed, -}) diff --git a/dist/pesde/lune/roots/src/index.d.ts b/dist/pesde/lune/roots/src/index.d.ts deleted file mode 100644 index d8e100c5..00000000 --- a/dist/pesde/lune/roots/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/dist/pesde/lune/roots/src/init.luau b/dist/pesde/lune/roots/src/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/dist/pesde/lune/roots/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/dist/pesde/lune/roots/src/methods/destroy.luau b/dist/pesde/lune/roots/src/methods/destroy.luau deleted file mode 100644 index 0c62a935..00000000 --- a/dist/pesde/lune/roots/src/methods/destroy.luau +++ /dev/null @@ -1,16 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function destroy(root: types.Self) - if root._destroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - root._destroyed = true - table.clear(root._rootLifecycles) - table.clear(root._rootProviders) - table.clear(root._subRoots) - root._start:clear() - root._finish:clear() -end - -return destroy diff --git a/dist/pesde/lune/roots/src/methods/use-lifecycles.luau b/dist/pesde/lune/roots/src/methods/use-lifecycles.luau deleted file mode 100644 index 3f12341f..00000000 --- a/dist/pesde/lune/roots/src/methods/use-lifecycles.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycles(root: types.Self, lifecycles: { lifecycles.Lifecycle }) - for _, lifecycle in lifecycles do - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - end - return root -end - -return useLifecycles diff --git a/dist/pesde/lune/roots/src/methods/use-providers.luau b/dist/pesde/lune/roots/src/methods/use-providers.luau deleted file mode 100644 index 1489c3a3..00000000 --- a/dist/pesde/lune/roots/src/methods/use-providers.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProviders(root: types.Self, providers: { providers.Provider }) - for _, provider in providers do - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - end - return root -end - -return useProviders diff --git a/dist/pesde/lune/roots/src/methods/use-root.luau b/dist/pesde/lune/roots/src/methods/use-root.luau deleted file mode 100644 index efc4ad1e..00000000 --- a/dist/pesde/lune/roots/src/methods/use-root.luau +++ /dev/null @@ -1,13 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoot(root: types.Self, subRoot: types.Root) - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - return root -end - -return useRoot diff --git a/dist/pesde/lune/roots/src/methods/use-roots.luau b/dist/pesde/lune/roots/src/methods/use-roots.luau deleted file mode 100644 index 7b5b9dda..00000000 --- a/dist/pesde/lune/roots/src/methods/use-roots.luau +++ /dev/null @@ -1,15 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoots(root: types.Self, subRoots: { types.Root }) - for _, subRoot in subRoots do - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - end - return root -end - -return useRoots diff --git a/dist/pesde/lune/roots/src/methods/will-finish.luau b/dist/pesde/lune/roots/src/methods/will-finish.luau deleted file mode 100644 index 893088f4..00000000 --- a/dist/pesde/lune/roots/src/methods/will-finish.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willFinish(root: types.Self, callback: () -> ()) - root._finish:register(callback) - return root -end - -return willFinish diff --git a/dist/pesde/lune/roots/src/methods/will-start.luau b/dist/pesde/lune/roots/src/methods/will-start.luau deleted file mode 100644 index 7c3d88c3..00000000 --- a/dist/pesde/lune/roots/src/methods/will-start.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willStart(root: types.Self, callback: () -> ()) - root._start:register(callback) - return root -end - -return willStart diff --git a/dist/pesde/lune/runtime/LICENSE.md b/dist/pesde/lune/runtime/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/runtime/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/runtime/pesde.toml b/dist/pesde/lune/runtime/pesde.toml deleted file mode 100644 index 6ec5bb70..00000000 --- a/dist/pesde/lune/runtime/pesde.toml +++ /dev/null @@ -1,21 +0,0 @@ -authors = ["Fire "] -description = "Runtime agnostic libraries for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/runtime" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "lune" -lib = "src/init.luau" -[dependencies] diff --git a/dist/pesde/lune/runtime/src/implementations/init.luau b/dist/pesde/lune/runtime/src/implementations/init.luau deleted file mode 100644 index 28dbe015..00000000 --- a/dist/pesde/lune/runtime/src/implementations/init.luau +++ /dev/null @@ -1,56 +0,0 @@ -local types = require("@self/../types") - -type Implementation = { new: (() -> T)?, implementation: T? } - -export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune" - -local supportedRuntimes = table.freeze({ - roblox = require("@self/roblox"), - luau = require("@self/luau"), - lune = require("@self/lune"), - lute = require("@self/lute"), - seal = require("@self/seal"), - zune = require("@self/zune"), -}) - -local currentRuntime: types.Runtime = nil -do - for _, runtime in supportedRuntimes :: { [string]: types.Runtime } do - local isRuntime = runtime.is() - if isRuntime then - local currentRuntimePriority = currentRuntime and currentRuntime.priority or 0 - local runtimePriority = runtime.priority or 0 - if currentRuntimePriority <= runtimePriority then - currentRuntime = runtime - end - end - end - assert(currentRuntime, "No supported runtime") -end - -local currentRuntimeName: RuntimeName = currentRuntime.name :: any - -local function notImplemented(functionName: string) - return function() - error(`'{functionName}' is not implemented by runtime '{currentRuntimeName}'`, 2) - end -end - -local function implementFunction(label: string, implementations: { [types.Runtime]: Implementation? }): T - local implementation = implementations[currentRuntime] - if implementation then - if implementation.new then - return implementation.new() - elseif implementation.implementation then - return implementation.implementation - end - end - return notImplemented(label) :: any -end - -return table.freeze({ - supportedRuntimes = supportedRuntimes, - currentRuntime = currentRuntime, - currentRuntimeName = currentRuntimeName, - implementFunction = implementFunction, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/init.spec.luau b/dist/pesde/lune/runtime/src/implementations/init.spec.luau deleted file mode 100644 index 3ce91cbb..00000000 --- a/dist/pesde/lune/runtime/src/implementations/init.spec.luau +++ /dev/null @@ -1,81 +0,0 @@ -local implementations = require("@self/../implementations") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("currentRuntime", function() - test("detects lune runtime", function() - expect(implementations.currentRuntimeName).is("lune") - expect(implementations.currentRuntime).is(implementations.supportedRuntimes.lune) - end) - end) - - describe("implementFunction", function() - test("implements for lune runtime", function() - local lune = function() end - local luau = function() end - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - implementation = lune, - }, - [implementations.supportedRuntimes.luau] = { - implementation = luau, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - end) - - test("constructs for lune runtime", function() - local lune = function() end - local luau = function() end - - local constructedLune = false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - new = function() - constructedLune = true - return lune - end, - }, - [implementations.supportedRuntimes.luau] = { - new = function() - return luau - end, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - expect(constructedLune).is_true() - end) - - test("defaults to not implemented function", function() - local constructSuccess, runSuccess = false, false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.roblox] = { - new = function() - constructSuccess = true - return function() - runSuccess = true - end - end, - }, - }) - - expect(constructSuccess).is(false) - expect(implementation).is_a("function") - expect(implementation).fails_with("'implementation' is not implemented by runtime 'lune'") - expect(runSuccess).is(false) - end) - end) -end diff --git a/dist/pesde/lune/runtime/src/implementations/luau.luau b/dist/pesde/lune/runtime/src/implementations/luau.luau deleted file mode 100644 index c67e52f4..00000000 --- a/dist/pesde/lune/runtime/src/implementations/luau.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "luau", - priority = -1, - is = function() - return true - end, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/lune.luau b/dist/pesde/lune/runtime/src/implementations/lune.luau deleted file mode 100644 index f49834eb..00000000 --- a/dist/pesde/lune/runtime/src/implementations/lune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local LUNE_VERSION_FORMAT = "(Lune) (%d+%.%d+%.%d+.*)+(%d+)" - -return types.Runtime({ - name = "lune", - is = function() - return string.match(_VERSION, LUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/lute.luau b/dist/pesde/lune/runtime/src/implementations/lute.luau deleted file mode 100644 index 7b6abc58..00000000 --- a/dist/pesde/lune/runtime/src/implementations/lute.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "lute", - is = function() - return false - end, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/roblox.luau b/dist/pesde/lune/runtime/src/implementations/roblox.luau deleted file mode 100644 index 91a780e2..00000000 --- a/dist/pesde/lune/runtime/src/implementations/roblox.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "roblox", - is = function() - -- wtf - return not not (_VERSION == "Luau" and game and workspace) - end, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/seal.luau b/dist/pesde/lune/runtime/src/implementations/seal.luau deleted file mode 100644 index 0a72684c..00000000 --- a/dist/pesde/lune/runtime/src/implementations/seal.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "seal", - is = function() - return false - end, -}) diff --git a/dist/pesde/lune/runtime/src/implementations/zune.luau b/dist/pesde/lune/runtime/src/implementations/zune.luau deleted file mode 100644 index 48243e05..00000000 --- a/dist/pesde/lune/runtime/src/implementations/zune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local ZUNE_VERSION_FORMAT = "(Zune) (%d+%.%d+%.%d+.*)+(%d+%.%d+)" - -return types.Runtime({ - name = "zune", - is = function() - return string.match(_VERSION, ZUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/lune/runtime/src/index.d.ts b/dist/pesde/lune/runtime/src/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/dist/pesde/lune/runtime/src/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/dist/pesde/lune/runtime/src/init.luau b/dist/pesde/lune/runtime/src/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/dist/pesde/lune/runtime/src/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/dist/pesde/lune/runtime/src/libs/task.luau b/dist/pesde/lune/runtime/src/libs/task.luau deleted file mode 100644 index 28c1ac9e..00000000 --- a/dist/pesde/lune/runtime/src/libs/task.luau +++ /dev/null @@ -1,157 +0,0 @@ -local implementations = require("../implementations") - -export type TaskLib = { - cancel: (thread) -> (), - defer: (functionOrThread: thread | (T...) -> (), T...) -> thread, - delay: (duration: number, functionOrThread: thread | (T...) -> (), T...) -> thread, - spawn: (functionOrThread: thread | (T...) -> (), T...) -> thread, - wait: (duration: number?) -> number, -} - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function defaultSpawn(functionOrThread: thread | (T...) -> (), ...: T...): thread - if type(functionOrThread) == "thread" then - coroutine.resume(functionOrThread, ...) - return functionOrThread - else - local thread = coroutine.create(functionOrThread) - coroutine.resume(thread, ...) - return thread - end -end - -local function defaultWait(seconds: number?) - local startTime = os.clock() - local endTime = startTime + (seconds or 1) - local clockTime: number - repeat - clockTime = os.clock() - until clockTime >= endTime - return clockTime - startTime -end - -local task: TaskLib = table.freeze({ - cancel = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.cancel - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").cancel - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").cancel - end, - }, - [supportedRuntimes.luau] = { - implementation = function(thread) - if not coroutine.close(thread) then - error(debug.traceback(thread, "Could not cancel thread")) - end - end, - }, - }), - defer = implementFunction("task.defer", { - [supportedRuntimes.roblox] = { - new = function() - return task.defer :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").defer - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").defer - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - delay = implementFunction("task.delay", { - [supportedRuntimes.roblox] = { - new = function() - return task.delay :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").delay - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").delay - end, - }, - [supportedRuntimes.luau] = { - implementation = function(duration: number, functionOrThread: thread | (T...) -> (), ...: T...): thread - return defaultSpawn( - if typeof(functionOrThread) == "function" - then function(duration, functionOrThread, ...) - defaultWait(duration) - functionOrThread(...) - end - else function(duration, functionOrThread, ...) - defaultWait(duration) - coroutine.resume(...) - end, - duration, - functionOrThread, - ... - ) - end, - }, - }), - spawn = implementFunction("task.spawn", { - [supportedRuntimes.roblox] = { - new = function() - return task.spawn :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").spawn - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").spawn - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - wait = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.wait - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").wait - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").wait - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultWait, - }, - }), -}) - -return task diff --git a/dist/pesde/lune/runtime/src/libs/task.spec.luau b/dist/pesde/lune/runtime/src/libs/task.spec.luau deleted file mode 100644 index 0918e87f..00000000 --- a/dist/pesde/lune/runtime/src/libs/task.spec.luau +++ /dev/null @@ -1,62 +0,0 @@ -local luneTask = require("@lune/task") -local task = require("./task") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - --- FIXME: can't async stuff lol -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("task", function() - test("spawn", function() - expect(task.spawn).is(luneTask.spawn) - local spawned = false - - task.spawn(function() - spawned = true - end) - - expect(spawned).is_true() - end) - - test("defer", function() - expect(task.defer).is(luneTask.defer) - - -- local spawned = false - - -- task.defer(function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - end) - - test("delay", function() - expect(task.delay).is(luneTask.delay) - -- local spawned = false - - -- task.delay(0.25, function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - - -- local startTime = os.clock() - -- repeat - -- until os.clock() - startTime > 0.5 - - -- print(spawned) - - -- expect(spawned).is_true() - end) - - test("wait", function() - expect(task.wait).is(luneTask.wait) - end) - - test("cancel", function() - expect(task.cancel).is(luneTask.cancel) - end) - end) -end diff --git a/dist/pesde/lune/runtime/src/libs/warn.luau b/dist/pesde/lune/runtime/src/libs/warn.luau deleted file mode 100644 index 6a4837ac..00000000 --- a/dist/pesde/lune/runtime/src/libs/warn.luau +++ /dev/null @@ -1,27 +0,0 @@ -local implementations = require("../implementations") - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function tostringTuple(...: any) - local stringified = {} - for index = 1, select("#", ...) do - table.insert(stringified, tostring(select(index, ...))) - end - return table.concat(stringified, " ") -end - -local warn: (T...) -> () = implementFunction("warn", { - [supportedRuntimes.roblox] = { - new = function() - return warn - end, - }, - [supportedRuntimes.luau] = { - implementation = function(...: T...) - print(`\27[0;33m{tostringTuple(...)}\27[0m`) - end, - }, -}) - -return warn diff --git a/dist/pesde/lune/runtime/src/types.luau b/dist/pesde/lune/runtime/src/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/dist/pesde/lune/runtime/src/types.luau +++ /dev/null @@ -1,13 +0,0 @@ -export type Runtime = { - name: string, - priority: number?, - is: () -> boolean, -} - -local function Runtime(x: Runtime) - return table.freeze(x) -end - -return table.freeze({ - Runtime = Runtime, -}) diff --git a/dist/pesde/lune/typecheckers/LICENSE.md b/dist/pesde/lune/typecheckers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/lune/typecheckers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/lune/typecheckers/pesde.toml b/dist/pesde/lune/typecheckers/pesde.toml deleted file mode 100644 index 0386d30a..00000000 --- a/dist/pesde/lune/typecheckers/pesde.toml +++ /dev/null @@ -1,21 +0,0 @@ -authors = ["Fire "] -description = "Typechecking primitives and compatibility for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/typecheckers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "lune" -lib = "src/init.luau" -[dependencies] diff --git a/dist/pesde/lune/typecheckers/src/init.luau b/dist/pesde/lune/typecheckers/src/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/pesde/roblox/dependencies/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/dependencies/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/dependencies/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/dependencies/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/dependencies/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/dependencies/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/dependencies/LICENSE.md b/dist/pesde/roblox/dependencies/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/dependencies/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/dependencies/lifecycles.luau b/dist/pesde/roblox/dependencies/lifecycles.luau deleted file mode 100644 index 41d507c6..00000000 --- a/dist/pesde/roblox/dependencies/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/roblox/dependencies/logger.luau b/dist/pesde/roblox/dependencies/logger.luau deleted file mode 100644 index 7f5c3021..00000000 --- a/dist/pesde/roblox/dependencies/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/roblox/dependencies/pesde.toml b/dist/pesde/roblox/dependencies/pesde.toml deleted file mode 100644 index 696e9c1e..00000000 --- a/dist/pesde/roblox/dependencies/pesde.toml +++ /dev/null @@ -1,38 +0,0 @@ -authors = ["Fire "] -description = "Dependency resolution logic for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "lifecycles.luau", - "logger.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/dependencies" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "lifecycles.luau", - "logger.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/dependencies/src/depend.luau b/dist/pesde/roblox/dependencies/src/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/dist/pesde/roblox/dependencies/src/depend.luau +++ /dev/null @@ -1,30 +0,0 @@ -local logger = require("./logger") -local types = require("./types") - -local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) -end - -local unresolvedMt = { - __metatable = "This metatable is locked.", - __index = useBeforeConstructed, - __newindex = useBeforeConstructed, -} - -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end - --- Wtf luau -local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( - (nil :: any) :: Dependencies, - ... -)) - -- Return a mock value that will be resolved during dependency resolution. - return setmetatable({ - type = "UnresolvedDependency", - dependency = dependency, - }, unresolvedMt) :: any -end - -return depend diff --git a/dist/pesde/roblox/dependencies/src/index.d.ts b/dist/pesde/roblox/dependencies/src/index.d.ts deleted file mode 100644 index a5bddcde..00000000 --- a/dist/pesde/roblox/dependencies/src/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "../lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/dist/pesde/roblox/dependencies/src/init.luau b/dist/pesde/roblox/dependencies/src/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/dist/pesde/roblox/dependencies/src/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/dist/pesde/roblox/dependencies/src/logger.luau b/dist/pesde/roblox/dependencies/src/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/dist/pesde/roblox/dependencies/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { - useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/pesde/roblox/dependencies/src/process-dependencies.luau b/dist/pesde/roblox/dependencies/src/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/dist/pesde/roblox/dependencies/src/process-dependencies.luau +++ /dev/null @@ -1,57 +0,0 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") - -export type ProccessDependencyResult = { - sortedDependencies: { types.Dependency }, - lifecycles: { lifecycles.Lifecycle }, -} - -type Set = { [T]: true } - -local function processDependencies(dependencies: Set>): ProccessDependencyResult - local sortedDependencies = {} - local lifecycles = {} - - -- TODO: optimize ts - local function visitDependency(dependency: types.Dependency) - -- print("Visiting dependency", dependency) - - for key, value in dependency :: any do - if key == "dependencies" then - -- print("Checking [prvd.dependencies]") - if typeof(value) == "table" then - for key, value in value do - -- print("Checking key", key, "value", value) - if typeof(value) == "table" and value.type == "UnresolvedDependency" then - local unresolved: types.UnresolvedDependency = value - -- print("Got unresolved dependency", unresolved.dependency, "visiting") - visitDependency(unresolved.dependency) - end - end - end - - continue - end - - if typeof(value) == "table" and value.type == "Lifecycle" and not table.find(lifecycles, value) then - table.insert(lifecycles, value) - end - end - - if dependencies[dependency] and not table.find(sortedDependencies, dependency) then - -- print("Pushing to sort") - table.insert(sortedDependencies, dependency) - end - end - - for dependency in dependencies do - visitDependency(dependency) - end - - return { - sortedDependencies = sortedDependencies, - lifecycles = lifecycles, - } -end - -return processDependencies diff --git a/dist/pesde/roblox/dependencies/src/process-dependencies.spec.luau b/dist/pesde/roblox/dependencies/src/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/dist/pesde/roblox/dependencies/src/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/dist/pesde/roblox/dependencies/src/sort-by-priority.luau b/dist/pesde/roblox/dependencies/src/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/dist/pesde/roblox/dependencies/src/sort-by-priority.luau +++ /dev/null @@ -1,14 +0,0 @@ -local types = require("./types") - -local function sortByPriority(dependencies: { types.Dependency }) - table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end - local leftIndex = table.find(dependencies, left) - local rightIndex = table.find(dependencies, right) - return leftIndex < rightIndex - end) -end - -return sortByPriority diff --git a/dist/pesde/roblox/dependencies/src/sort-by-priority.spec.luau b/dist/pesde/roblox/dependencies/src/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/dist/pesde/roblox/dependencies/src/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/dist/pesde/roblox/dependencies/src/types.luau b/dist/pesde/roblox/dependencies/src/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/dist/pesde/roblox/dependencies/src/types.luau +++ /dev/null @@ -1,14 +0,0 @@ -export type Dependency = Self & { - dependencies: Dependencies, - priority: number?, - new: (dependencies: Dependencies, NewArgs...) -> Dependency, -} - -export type UnresolvedDependency = { - type: "UnresolvedDependency", - dependency: Dependency, -} - -export type dependencies = { __prvdmwrong_dependencies: never } - -return nil diff --git a/dist/pesde/roblox/lifecycles/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/lifecycles/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/lifecycles/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/lifecycles/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/lifecycles/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/lifecycles/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/lifecycles/LICENSE.md b/dist/pesde/roblox/lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/lifecycles/logger.luau b/dist/pesde/roblox/lifecycles/logger.luau deleted file mode 100644 index 7f5c3021..00000000 --- a/dist/pesde/roblox/lifecycles/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/roblox/lifecycles/pesde.toml b/dist/pesde/roblox/lifecycles/pesde.toml deleted file mode 100644 index 1c949f70..00000000 --- a/dist/pesde/roblox/lifecycles/pesde.toml +++ /dev/null @@ -1,38 +0,0 @@ -authors = ["Fire "] -description = "Provider method lifecycles implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/lifecycles" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "runtime.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/lifecycles/runtime.luau b/dist/pesde/roblox/lifecycles/runtime.luau deleted file mode 100644 index 7530eb0a..00000000 --- a/dist/pesde/roblox/lifecycles/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/roblox/lifecycles/src/create.luau b/dist/pesde/roblox/lifecycles/src/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/dist/pesde/roblox/lifecycles/src/create.luau +++ /dev/null @@ -1,45 +0,0 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") - -local function create( - method: string, - onFire: (lifecycle: types.Lifecycle, Args...) -> () -): types.Lifecycle - local self: types.Self = { - _isDestroyed = false, - _selfRegistered = {}, - _selfUnregistered = {}, - - type = "Lifecycle", - callbacks = {}, - - fire = onFire, - method = method, - register = register, - unregister = unregister, - clear = clear, - onRegistered = onRegistered, - onUnregistered = onUnregistered, - await = await, - destroy = destroy, - } :: any - - methodToLifecycles[method] = methodToLifecycles[method] or {} - table.insert(methodToLifecycles[method], self) - - for _, onLifecycleConstructed in lifecycleConstructed.callbacks do - onLifecycleConstructed(self :: types.Lifecycle) - end - - return self -end - -return create diff --git a/dist/pesde/roblox/lifecycles/src/handlers/fire-concurrent.luau b/dist/pesde/roblox/lifecycles/src/handlers/fire-concurrent.luau deleted file mode 100644 index f279b888..00000000 --- a/dist/pesde/roblox/lifecycles/src/handlers/fire-concurrent.luau +++ /dev/null @@ -1,10 +0,0 @@ -local runtime = require("../../runtime") -local types = require("../types") - -local function fireConcurrent(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - runtime.threadpool.spawn(callback, ...) - end -end - -return fireConcurrent diff --git a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-constructed.luau b/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-constructed.luau deleted file mode 100644 index 8ea4d81b..00000000 --- a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-constructed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleConstructed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleConstructed = onLifecycleConstructed, -}) diff --git a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-unregistered.luau b/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-unregistered.luau deleted file mode 100644 index 0ec81756..00000000 --- a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-unregistered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleUnregistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUnregistered = onLifecycleUnregistered, -}) diff --git a/dist/pesde/roblox/lifecycles/src/index.d.ts b/dist/pesde/roblox/lifecycles/src/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/dist/pesde/roblox/lifecycles/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/dist/pesde/roblox/lifecycles/src/init.luau b/dist/pesde/roblox/lifecycles/src/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/dist/pesde/roblox/lifecycles/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/dist/pesde/roblox/lifecycles/src/logger.luau b/dist/pesde/roblox/lifecycles/src/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/dist/pesde/roblox/lifecycles/src/logger.luau +++ /dev/null @@ -1,6 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { - useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", -}) diff --git a/dist/pesde/roblox/lifecycles/src/method-to-lifecycles.luau b/dist/pesde/roblox/lifecycles/src/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/dist/pesde/roblox/lifecycles/src/method-to-lifecycles.luau +++ /dev/null @@ -1,5 +0,0 @@ -local types = require("./types") - -local methodToLifecycles: { [string]: { types.Lifecycle } } = {} - -return methodToLifecycles diff --git a/dist/pesde/roblox/lifecycles/src/methods/await.luau b/dist/pesde/roblox/lifecycles/src/methods/await.luau deleted file mode 100644 index ed8299d6..00000000 --- a/dist/pesde/roblox/lifecycles/src/methods/await.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function await(lifecycle: types.Self): Args... - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local currentThread = coroutine.running() - local function callback(...: Args...) - lifecycle:unregister(callback) - coroutine.resume(currentThread, ...) - end - lifecycle:register(callback) - return coroutine.yield() -end - -return await diff --git a/dist/pesde/roblox/lifecycles/src/methods/destroy.luau b/dist/pesde/roblox/lifecycles/src/methods/destroy.luau deleted file mode 100644 index d9d5d6cc..00000000 --- a/dist/pesde/roblox/lifecycles/src/methods/destroy.luau +++ /dev/null @@ -1,18 +0,0 @@ -local lifecycleDestroyed = require("../hooks/lifecycle-destroyed") -local logger = require("../logger") -local methodToLifecycles = require("../method-to-lifecycles") -local types = require("../types") - -local function destroy(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - table.remove(methodToLifecycles[lifecycle.method], table.find(methodToLifecycles[lifecycle.method], lifecycle)) - table.clear(lifecycle.callbacks) - for _, callback in lifecycleDestroyed.callbacks do - callback(lifecycle) - end - lifecycle._isDestroyed = true -end - -return destroy diff --git a/dist/pesde/roblox/lifecycles/src/methods/on-registered.luau b/dist/pesde/roblox/lifecycles/src/methods/on-registered.luau deleted file mode 100644 index 7ddb009a..00000000 --- a/dist/pesde/roblox/lifecycles/src/methods/on-registered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onRegistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end - table.insert(lifecycle._selfRegistered, listener) - return function() - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end -end - -return onRegistered diff --git a/dist/pesde/roblox/lifecycles/src/methods/on-unregistered.luau b/dist/pesde/roblox/lifecycles/src/methods/on-unregistered.luau deleted file mode 100644 index 842040ec..00000000 --- a/dist/pesde/roblox/lifecycles/src/methods/on-unregistered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onUnregistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end - table.insert(lifecycle._selfUnregistered, listener) - return function() - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end -end - -return onUnregistered diff --git a/dist/pesde/roblox/lifecycles/src/methods/unregister.luau b/dist/pesde/roblox/lifecycles/src/methods/unregister.luau deleted file mode 100644 index 0ca7223f..00000000 --- a/dist/pesde/roblox/lifecycles/src/methods/unregister.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function unregister(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local index = table.find(lifecycle.callbacks, callback) - if index then - table.remove(lifecycle.callbacks, index) - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end -end - -return unregister diff --git a/dist/pesde/roblox/lifecycles/src/types.luau b/dist/pesde/roblox/lifecycles/src/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/dist/pesde/roblox/lifecycles/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Lifecycle = { - type: "Lifecycle", - - callbacks: { (Args...) -> () }, - method: string, - - register: (self: Lifecycle, callback: (Args...) -> ()) -> (), - fire: (self: Lifecycle, Args...) -> (), - unregister: (self: Lifecycle, callback: (Args...) -> ()) -> (), - clear: (self: Lifecycle) -> (), - onRegistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - onUnregistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - await: (self: Lifecycle) -> Args..., - destroy: (self: Lifecycle) -> (), -} - -export type Self = Lifecycle & { - _isDestroyed: boolean, - _selfRegistered: { (callback: (Args...) -> ()) -> () }, - _selfUnregistered: { (callback: (Args...) -> ()) -> () }, -} - -return nil diff --git a/dist/pesde/roblox/logger/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/logger/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/logger/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/logger/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/logger/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/logger/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/logger/LICENSE.md b/dist/pesde/roblox/logger/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/logger/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/logger/pesde.toml b/dist/pesde/roblox/logger/pesde.toml deleted file mode 100644 index 12da700e..00000000 --- a/dist/pesde/roblox/logger/pesde.toml +++ /dev/null @@ -1,35 +0,0 @@ -authors = ["Fire "] -description = "Logging for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/logger" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/logger/runtime.luau b/dist/pesde/roblox/logger/runtime.luau deleted file mode 100644 index 7530eb0a..00000000 --- a/dist/pesde/roblox/logger/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/roblox/logger/src/allow-web-links.luau b/dist/pesde/roblox/logger/src/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/dist/pesde/roblox/logger/src/allow-web-links.luau +++ /dev/null @@ -1,5 +0,0 @@ -local runtime = require("../runtime") - -local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true - -return allowWebLinks diff --git a/dist/pesde/roblox/logger/src/create.luau b/dist/pesde/roblox/logger/src/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/dist/pesde/roblox/logger/src/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/dist/pesde/roblox/logger/src/format-log.luau b/dist/pesde/roblox/logger/src/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/dist/pesde/roblox/logger/src/format-log.luau +++ /dev/null @@ -1,43 +0,0 @@ -local types = require("./types") - -local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string - local formattedTemplate = string.format(log.template, table.unpack(log)) - - local error = log.error - local trace: string? = log.trace - - if error then - trace = error.trace - formattedTemplate = string.gsub(formattedTemplate, "ERROR_MESSAGE", error.message) - end - - local id: string? - - -- TODO: find a better way to do ts while still being ergonomic - for templateKey, template in (self :: any) :: { [string]: string } do - if template == log.template then - id = templateKey - break - end - end - - if id then - formattedTemplate ..= `\nID: {id}` - end - - if errorInfoUrl then - formattedTemplate ..= `\nLearn more: {errorInfoUrl}` - if id then - formattedTemplate ..= `#{string.lower(id)}` - end - end - - if trace then - formattedTemplate ..= `\n---- Stack trace ----\n{trace}` - end - - -- Labels are added from createLogger, so we don't add it here - return string.gsub(formattedTemplate, "\n", "\n ") -end - -return formatLog diff --git a/dist/pesde/roblox/logger/src/index.d.ts b/dist/pesde/roblox/logger/src/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/dist/pesde/roblox/logger/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/dist/pesde/roblox/logger/src/init.luau b/dist/pesde/roblox/logger/src/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/dist/pesde/roblox/logger/src/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/dist/pesde/roblox/logger/src/parse-error.luau b/dist/pesde/roblox/logger/src/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/dist/pesde/roblox/logger/src/parse-error.luau +++ /dev/null @@ -1,12 +0,0 @@ -local types = require("./types") - -local function parseError(err: string): types.Error - return { - type = "Error", - raw = err, - message = err:gsub("^.+:%d+:%s*", ""), - trace = debug.traceback(nil, 2), - } -end - -return parseError diff --git a/dist/pesde/roblox/logger/src/standard-error-info-url.luau b/dist/pesde/roblox/logger/src/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/dist/pesde/roblox/logger/src/standard-error-info-url.luau +++ /dev/null @@ -1,5 +0,0 @@ -local function standardErrorInfoUrl(label: string): string - return `https://prvdmwrong.luau.page/api-reference/{label}/errors` -end - -return standardErrorInfoUrl diff --git a/dist/pesde/roblox/logger/src/types.luau b/dist/pesde/roblox/logger/src/types.luau deleted file mode 100644 index d1699037..00000000 --- a/dist/pesde/roblox/logger/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Error = { - type: "Error", - raw: string, - message: string, - trace: string, -} - -export type Log = { - template: string, - error: Error?, - trace: string?, - [number]: unknown, -} - -export type Logger = Templates & { - type: "Logger", - print: (self: Logger, props: Log) -> (), - warn: (self: Logger, props: Log) -> (), - error: (self: Logger, props: Log) -> (), - fatalError: (self: Logger, props: Log) -> never, -} - -return nil diff --git a/dist/pesde/roblox/providers/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/providers/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/providers/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/providers/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/providers/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/providers/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/providers/LICENSE.md b/dist/pesde/roblox/providers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/providers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/providers/dependencies.luau b/dist/pesde/roblox/providers/dependencies.luau deleted file mode 100644 index 8613b470..00000000 --- a/dist/pesde/roblox/providers/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/roblox/providers/lifecycles.luau b/dist/pesde/roblox/providers/lifecycles.luau deleted file mode 100644 index 41d507c6..00000000 --- a/dist/pesde/roblox/providers/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/roblox/providers/logger.luau b/dist/pesde/roblox/providers/logger.luau deleted file mode 100644 index 7f5c3021..00000000 --- a/dist/pesde/roblox/providers/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/roblox/providers/pesde.toml b/dist/pesde/roblox/providers/pesde.toml deleted file mode 100644 index 2c228e8b..00000000 --- a/dist/pesde/roblox/providers/pesde.toml +++ /dev/null @@ -1,44 +0,0 @@ -authors = ["Fire "] -description = "Provider creation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/providers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "runtime.luau", - "logger.luau", - "lifecycles.luau", - "dependencies.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/providers/runtime.luau b/dist/pesde/roblox/providers/runtime.luau deleted file mode 100644 index 7530eb0a..00000000 --- a/dist/pesde/roblox/providers/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/roblox/providers/src/create.luau b/dist/pesde/roblox/providers/src/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/dist/pesde/roblox/providers/src/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/dist/pesde/roblox/providers/src/index.d.ts b/dist/pesde/roblox/providers/src/index.d.ts deleted file mode 100644 index 2ab36e15..00000000 --- a/dist/pesde/roblox/providers/src/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "../dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/dist/pesde/roblox/providers/src/init.luau b/dist/pesde/roblox/providers/src/init.luau deleted file mode 100644 index d678d850..00000000 --- a/dist/pesde/roblox/providers/src/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/dist/pesde/roblox/providers/src/name-of.luau b/dist/pesde/roblox/providers/src/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/dist/pesde/roblox/providers/src/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/dist/pesde/roblox/providers/src/provider-classes.luau b/dist/pesde/roblox/providers/src/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/dist/pesde/roblox/providers/src/provider-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local providerClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return providerClasses diff --git a/dist/pesde/roblox/providers/src/types.luau b/dist/pesde/roblox/providers/src/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/dist/pesde/roblox/providers/src/types.luau +++ /dev/null @@ -1,12 +0,0 @@ -local dependencies = require("../dependencies") - -export type Provider = dependencies.Dependency, - __tostring: (self: Provider) -> string, - name: string?, - constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, -}, Dependencies> - -return nil diff --git a/dist/pesde/roblox/prvdmwrong/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/prvdmwrong/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/prvdmwrong/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/prvdmwrong/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/prvdmwrong/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/prvdmwrong/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/prvdmwrong/LICENSE.md b/dist/pesde/roblox/prvdmwrong/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/prvdmwrong/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/prvdmwrong/dependencies.luau b/dist/pesde/roblox/prvdmwrong/dependencies.luau deleted file mode 100644 index 8613b470..00000000 --- a/dist/pesde/roblox/prvdmwrong/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/roblox/prvdmwrong/lifecycles.luau b/dist/pesde/roblox/prvdmwrong/lifecycles.luau deleted file mode 100644 index 41d507c6..00000000 --- a/dist/pesde/roblox/prvdmwrong/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/roblox/prvdmwrong/pesde.toml b/dist/pesde/roblox/prvdmwrong/pesde.toml deleted file mode 100644 index 065c5392..00000000 --- a/dist/pesde/roblox/prvdmwrong/pesde.toml +++ /dev/null @@ -1,44 +0,0 @@ -authors = ["Fire "] -description = "Entry point to Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/prvdmwrong" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "dependencies.luau", - "roots.luau", - "lifecycles.luau", - "providers.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/prvdmwrong/providers.luau b/dist/pesde/roblox/prvdmwrong/providers.luau deleted file mode 100644 index bdf28037..00000000 --- a/dist/pesde/roblox/prvdmwrong/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/roblox/prvdmwrong/roots.luau b/dist/pesde/roblox/prvdmwrong/roots.luau deleted file mode 100644 index 29353bdf..00000000 --- a/dist/pesde/roblox/prvdmwrong/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/roblox/prvdmwrong/src/index.d.ts b/dist/pesde/roblox/prvdmwrong/src/index.d.ts deleted file mode 100644 index 2058129c..00000000 --- a/dist/pesde/roblox/prvdmwrong/src/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "../dependencies"; -import lifecycles from "../lifecycles"; -import providers from "../providers"; -import roots from "../roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/dist/pesde/roblox/prvdmwrong/src/init.luau b/dist/pesde/roblox/prvdmwrong/src/init.luau deleted file mode 100644 index 1381801d..00000000 --- a/dist/pesde/roblox/prvdmwrong/src/init.luau +++ /dev/null @@ -1,45 +0,0 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") - -export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle -export type Root = roots.Root -export type StartedRoot = roots.StartedRoot - -local prvd = { - provider = providers.create, - root = roots.create, - depend = dependencies.depend, - nameOf = providers.nameOf, - - lifecycle = lifecycles.create, - fireConcurrent = lifecycles.handlers.fireConcurrent, - fireSequential = lifecycles.handlers.fireSequential, - - hooks = table.freeze({ - onProviderUsed = roots.hooks.onProviderUsed, - onLifecycleUsed = roots.hooks.onLifecycleUsed, - onRootConstructing = roots.hooks.onRootConstructing, - onRootUsed = roots.hooks.onRootUsed, - onRootStarted = roots.hooks.onRootStarted, - onRootFinished = roots.hooks.onRootFinished, - onRootDestroyed = roots.hooks.onRootDestroyed, - - onLifecycleConstructed = lifecycles.hooks.onLifecycleConstructed, - onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, - onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, - onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), -} - -type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) - -local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -local module: PrvdModule = setmetatable(prvd, mt) :: any -return module diff --git a/dist/pesde/roblox/rbx-components/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/rbx-components/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/rbx-components/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/rbx-components/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/rbx-components/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/rbx-components/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/rbx-components/LICENSE.md b/dist/pesde/roblox/rbx-components/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/rbx-components/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/rbx-components/dependencies.luau b/dist/pesde/roblox/rbx-components/dependencies.luau deleted file mode 100644 index 8613b470..00000000 --- a/dist/pesde/roblox/rbx-components/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/roblox/rbx-components/logger.luau b/dist/pesde/roblox/rbx-components/logger.luau deleted file mode 100644 index 7f5c3021..00000000 --- a/dist/pesde/roblox/rbx-components/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/roblox/rbx-components/pesde.toml b/dist/pesde/roblox/rbx-components/pesde.toml deleted file mode 100644 index a481f22b..00000000 --- a/dist/pesde/roblox/rbx-components/pesde.toml +++ /dev/null @@ -1,44 +0,0 @@ -authors = ["Fire "] -description = "Component functionality for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/rbx_components" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "roots.luau", - "providers.luau", - "dependencies.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -roots = { workspace = "prvdmwrong/roots", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/rbx-components/providers.luau b/dist/pesde/roblox/rbx-components/providers.luau deleted file mode 100644 index bdf28037..00000000 --- a/dist/pesde/roblox/rbx-components/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/roblox/rbx-components/roots.luau b/dist/pesde/roblox/rbx-components/roots.luau deleted file mode 100644 index 29353bdf..00000000 --- a/dist/pesde/roblox/rbx-components/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/pesde/roblox/rbx-components/src/component-classes.luau b/dist/pesde/roblox/rbx-components/src/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/dist/pesde/roblox/rbx-components/src/component-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local componentClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return componentClasses diff --git a/dist/pesde/roblox/rbx-components/src/create.luau b/dist/pesde/roblox/rbx-components/src/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/dist/pesde/roblox/rbx-components/src/create.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("./component-classes") -local types = require("./types") - --- TODO: prvdmwrong/classes package? -local function create(self: Self): types.Component - local component: types.Component = self :: any - - if component.__index == nil then - component.__index = component - end - - -- TODO: abstract nameOf - - if component.new == nil then - function component.new(instance: any) - local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end - return self - end - end - - componentClasses[component] = true - return component -end - -return create diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/create-component-class-provider.luau b/dist/pesde/roblox/rbx-components/src/extend-root/create-component-class-provider.luau deleted file mode 100644 index 9d5ae999..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/create-component-class-provider.luau +++ /dev/null @@ -1,31 +0,0 @@ -local ComponentProvider = require("../component-provider") -local providers = require("../../providers") -local types = require("../types") - -local ComponentClassProvider = {} -ComponentClassProvider.priority = -math.huge -ComponentClassProvider.name = "@rbx-components.ComponentClassProvider" -ComponentClassProvider.dependencies = table.freeze({ - componentProvider = ComponentProvider, -}) - -ComponentClassProvider._components = {} :: { types.AnyComponent } - -function ComponentClassProvider.constructor( - self: ComponentClassProvider, - dependencies: typeof(ComponentClassProvider.dependencies) -) - for _, class in self._components do - dependencies.componentProvider:addComponentClass(class) - end -end - -export type ComponentClassProvider = typeof(ComponentClassProvider) - -local function createComponentClassProvider(components: { types.AnyComponent }) - local provider = table.clone(ComponentClassProvider) - provider._components = components - return providers.create(provider) -end - -return createComponentClassProvider diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/init.luau b/dist/pesde/roblox/rbx-components/src/extend-root/init.luau deleted file mode 100644 index 6e9f0578..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/init.luau +++ /dev/null @@ -1,30 +0,0 @@ -local ComponentProvider = require("./component-provider") -local createComponentClassProvider = require("@self/create-component-class-provider") -local logger = require("./logger") -local roots = require("../roots") -local types = require("./types") -local useComponent = require("@self/use-component") -local useComponents = require("@self/use-components") -local useModuleAsComponent = require("@self/use-module-as-component") -local useModulesAsComponents = require("@self/use-modules-as-components") - -local function extendRoot(root: types.RootPrivate): types.Root - if root._hasComponentExtensions then - return logger:fatalError({ template = logger.alreadyExtendedRoot }) - end - - root._hasComponentExtensions = true - root._classes = {} - - root:useProvider(ComponentProvider) - root:useProvider(createComponentClassProvider(root._classes)) - - root.useComponent = useComponent :: any - root.useComponents = useComponents :: any - root.useModuleAsComponent = useModuleAsComponent :: any - root.useModulesAsComponents = useModulesAsComponents :: any - - return root -end - -return extendRoot :: (root: roots.Root) -> types.Root diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/use-component.luau b/dist/pesde/roblox/rbx-components/src/extend-root/use-component.luau deleted file mode 100644 index b0bd8d1f..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/use-component.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function useComponent(root: types.RootPrivate, component: types.AnyComponent) - table.insert(root._classes, component) - return root -end - -return useComponent diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/use-components.luau b/dist/pesde/roblox/rbx-components/src/extend-root/use-components.luau deleted file mode 100644 index 809a4006..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/use-components.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local function useComponents(root: types.RootPrivate, components: { types.AnyComponent }) - for index = 1, #components do - table.insert(root._classes, components[index]) - end - return root -end - -return useComponents diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/use-module-as-component.luau b/dist/pesde/roblox/rbx-components/src/extend-root/use-module-as-component.luau deleted file mode 100644 index 46724fe7..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/use-module-as-component.luau +++ /dev/null @@ -1,12 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModuleAsComponent(root: types.RootPrivate, module: ModuleScript) - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - return root -end - -return useModuleAsComponent diff --git a/dist/pesde/roblox/rbx-components/src/extend-root/use-modules-as-components.luau b/dist/pesde/roblox/rbx-components/src/extend-root/use-modules-as-components.luau deleted file mode 100644 index bababafa..00000000 --- a/dist/pesde/roblox/rbx-components/src/extend-root/use-modules-as-components.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModulesAsComponents( - root: types.RootPrivate, - modules: { Instance }, - predicate: ((ModuleScript) -> boolean)? -) - for index = 1, #modules do - local module = modules[index] - - if not module:IsA("ModuleScript") then - continue - end - - if predicate and not predicate(module) then - continue - end - - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - end - return root -end - -return useModulesAsComponents diff --git a/dist/pesde/roblox/rbx-components/src/init.luau b/dist/pesde/roblox/rbx-components/src/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/dist/pesde/roblox/rbx-components/src/init.luau +++ /dev/null @@ -1,24 +0,0 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") - -export type Component = types.Component -export type Root = types.Root - -local components = { - create = create, - extendRoot = extendRoot, - _ = table.freeze({ - componentClasses = componentClasses, - }), -} - -local mt = {} - -function mt.__call(_, component: Self): types.Component - return create(component) -end - -table.freeze(mt) -return table.freeze(setmetatable(components, mt)) diff --git a/dist/pesde/roblox/rbx-components/src/logger.luau b/dist/pesde/roblox/rbx-components/src/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/dist/pesde/roblox/rbx-components/src/logger.luau +++ /dev/null @@ -1,8 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { - alreadyExtendedRoot = "Root already has component extension.", - invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", - alreadyRegisteredComponent = "Component already registered.", - multipleSameTag = "Multiple components use the CollectionService tag '%s', which is likely a mistake. Supress this warning with `_G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG = true`.", -}) diff --git a/dist/pesde/roblox/rbx-components/src/types.luau b/dist/pesde/roblox/rbx-components/src/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/dist/pesde/roblox/rbx-components/src/types.luau +++ /dev/null @@ -1,30 +0,0 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") - -export type Component = dependencies.Dependency, - tag: string?, - instanceCheck: (unknown) -> boolean, - blacklistInstances: { Instance }?, - whitelistInstances: { Instance }?, - constructor: (self: Component, instance: Instance) -> ()?, - added: (self: Component) -> ()?, - removed: (self: Component) -> ()?, - destroyed: (self: Component) -> ()?, -}, nil, Instance> - -export type Root = roots.Root & { - useModuleAsComponent: (root: Root, module: ModuleScript) -> Root, - useModulesAsComponents: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useComponent: (root: Root, component: Component) -> Root, - useComponents: (root: Root, components: { Component }) -> Root, -} - -export type RootPrivate = Root & { - _hasComponentExtensions: true?, - _classes: { Component }, -} - -export type AnyComponent = Component - -return nil diff --git a/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/rbx-lifecycles/LICENSE.md b/dist/pesde/roblox/rbx-lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/rbx-lifecycles/pesde.toml b/dist/pesde/roblox/rbx-lifecycles/pesde.toml deleted file mode 100644 index 1a9be374..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/pesde.toml +++ /dev/null @@ -1,35 +0,0 @@ -authors = ["Fire "] -description = "Lifecycles implementations for Roblox" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "prvdmwrong.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/rbx_lifecycles" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "prvdmwrong.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -prvdmwrong = { workspace = "prvdmwrong/prvdmwrong", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/rbx-lifecycles/prvdmwrong.luau b/dist/pesde/roblox/rbx-lifecycles/prvdmwrong.luau deleted file mode 100644 index 96053434..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/prvdmwrong.luau +++ /dev/null @@ -1,6 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/prvdmwrong") -export type Root = DEPENDENCY.Root -export type Lifecycle = DEPENDENCY.Lifecycle -export type StartedRoot = DEPENDENCY.StartedRoot -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/roblox/rbx-lifecycles/src/index.d.ts b/dist/pesde/roblox/rbx-lifecycles/src/index.d.ts deleted file mode 100644 index 3ad36447..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/src/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace RbxLifecycles { - export const RbxLifecycles: Provider<{ - preSimulation: Lifecycle<[dt: number]>; - postSimulation: Lifecycle<[dt: number]>; - preAnimation: Lifecycle<[dt: number]>; - preRender: Lifecycle<[dt: number]>; - playerAdded: Lifecycle<[player: Player]>; - playerRemoving: Lifecycle<[player: Player]>; - }>; - - export interface PreSimulation { - preSimulation(dt: number): void; - } - - export interface PostSimulation { - postSimulation(dt: number): void; - } - - export interface PreAnimation { - preAnimation(dt: number): void; - } - - export interface PreRender { - preRender(dt: number): void; - } - - export interface PlayerAdded { - playerAdded(player: Player): void; - } - - export interface PlayerRemoving { - playerRemoving(player: Player): void; - } -} - -export = RbxLifecycles; -export as namespace RbxLifecycles; diff --git a/dist/pesde/roblox/rbx-lifecycles/src/init.luau b/dist/pesde/roblox/rbx-lifecycles/src/init.luau deleted file mode 100644 index c1243680..00000000 --- a/dist/pesde/roblox/rbx-lifecycles/src/init.luau +++ /dev/null @@ -1,67 +0,0 @@ -local Players = game:GetService("Players") -local RunService = game:GetService("RunService") - -local prvd = require("./prvdmwrong") - -local fireConcurrent = prvd.fireConcurrent - -local RbxLifecycles = {} -RbxLifecycles.name = "@prvdmwrong/rbx-lifecycles" -RbxLifecycles.priority = -math.huge - -RbxLifecycles.preSimulation = prvd.lifecycle("preSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.postSimulation = prvd.lifecycle("postSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preAnimation = prvd.lifecycle("preAnimation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preRender = prvd.lifecycle("preRender", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerAdded = prvd.lifecycle("playerAdded", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerRemoving = prvd.lifecycle("playerRemoving", fireConcurrent) :: prvd.Lifecycle - -local function wrapLifecycle(lifecycle: prvd.Lifecycle<...unknown>) - return function(...: unknown) - lifecycle:fire(...) - end -end - -function RbxLifecycles.constructor(self: RbxLifecycles) - self.connections = {} :: { RBXScriptConnection } - - self:_addConnections( - RunService.PreSimulation:Connect(wrapLifecycle(RbxLifecycles.preSimulation :: any)), - RunService.PostSimulation:Connect(wrapLifecycle(RbxLifecycles.postSimulation :: any)), - RunService.PreAnimation:Connect(wrapLifecycle(RbxLifecycles.preAnimation :: any)) - ) - - if RunService:IsClient() then - self:_addConnections(RunService.PreRender:Connect(wrapLifecycle(RbxLifecycles.preRender :: any))) - end - - self:_addConnections( - Players.PlayerAdded:Connect(wrapLifecycle(RbxLifecycles.playerAdded :: any)), - Players.PlayerRemoving:Connect(wrapLifecycle(RbxLifecycles.playerRemoving :: any)) - ) -end - -function RbxLifecycles.finish(self: RbxLifecycles) - for _, connection in self.connections do - if connection.Connected then - connection:Disconnect() - end - end - table.clear(self.connections) -end - -function RbxLifecycles._addConnections(self: RbxLifecycles, ...: RBXScriptConnection) - for index = 1, select("#", ...) do - table.insert(self.connections, select(index, ...) :: any) - end -end - --- Needed so typescript can require the provider as: --- --- ```ts --- import { RbxLifecycles } from "@rbxts/rbx-lifecycles" --- ``` -RbxLifecycles.RbxLifecycles = RbxLifecycles - -export type RbxLifecycles = typeof(RbxLifecycles) -return prvd(RbxLifecycles) diff --git a/dist/pesde/roblox/roots/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/roots/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/roots/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/roots/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/roots/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/roots/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/roots/LICENSE.md b/dist/pesde/roblox/roots/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/roots/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/roots/dependencies.luau b/dist/pesde/roblox/roots/dependencies.luau deleted file mode 100644 index 8613b470..00000000 --- a/dist/pesde/roblox/roots/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/pesde/roblox/roots/lifecycles.luau b/dist/pesde/roblox/roots/lifecycles.luau deleted file mode 100644 index 41d507c6..00000000 --- a/dist/pesde/roblox/roots/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/pesde/roblox/roots/logger.luau b/dist/pesde/roblox/roots/logger.luau deleted file mode 100644 index 7f5c3021..00000000 --- a/dist/pesde/roblox/roots/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/pesde/roblox/roots/pesde.toml b/dist/pesde/roblox/roots/pesde.toml deleted file mode 100644 index d21822cd..00000000 --- a/dist/pesde/roblox/roots/pesde.toml +++ /dev/null @@ -1,47 +0,0 @@ -authors = ["Fire "] -description = "Roots implementation for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -license = "MPL-2.0" -name = "prvdmwrong/roots" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = [ - "src", - "logger.luau", - "dependencies.luau", - "runtime.luau", - "providers.luau", - "lifecycles.luau", -] -environment = "roblox" -lib = "src/init.luau" -[dependencies] -logger = { workspace = "prvdmwrong/logger", version = "0.2.0-rc.4" } -dependencies = { workspace = "prvdmwrong/dependencies", version = "0.2.0-rc.4" } -providers = { workspace = "prvdmwrong/providers", version = "0.2.0-rc.4" } -lifecycles = { workspace = "prvdmwrong/lifecycles", version = "0.2.0-rc.4" } -runtime = { workspace = "prvdmwrong/runtime", version = "0.2.0-rc.4" } - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/roots/providers.luau b/dist/pesde/roblox/roots/providers.luau deleted file mode 100644 index bdf28037..00000000 --- a/dist/pesde/roblox/roots/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/pesde/roblox/roots/runtime.luau b/dist/pesde/roblox/roots/runtime.luau deleted file mode 100644 index 7530eb0a..00000000 --- a/dist/pesde/roblox/roots/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./roblox_packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/pesde/roblox/roots/src/create.luau b/dist/pesde/roblox/roots/src/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/dist/pesde/roblox/roots/src/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/dist/pesde/roblox/roots/src/hooks/lifecycle-used.luau b/dist/pesde/roblox/roots/src/hooks/lifecycle-used.luau deleted file mode 100644 index bd29276a..00000000 --- a/dist/pesde/roblox/roots/src/hooks/lifecycle-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycles = require("../../lifecycles") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: lifecycles.Lifecycle) -> () } = {} - -local function onLifecycleUsed(listener: (root: types.Root, lifecycle: lifecycles.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUsed = onLifecycleUsed, -}) diff --git a/dist/pesde/roblox/roots/src/hooks/provider-used.luau b/dist/pesde/roblox/roots/src/hooks/provider-used.luau deleted file mode 100644 index dac2573c..00000000 --- a/dist/pesde/roblox/roots/src/hooks/provider-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providers = require("../../providers") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: providers.Provider) -> () } = {} - -local function onProviderUsed(listener: (root: types.Root, provider: providers.Provider) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onProviderUsed = onProviderUsed, -}) diff --git a/dist/pesde/roblox/roots/src/hooks/root-constructing.luau b/dist/pesde/roblox/roots/src/hooks/root-constructing.luau deleted file mode 100644 index 5fb8b819..00000000 --- a/dist/pesde/roblox/roots/src/hooks/root-constructing.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootConstructing(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootConstructing = onRootConstructing, -}) diff --git a/dist/pesde/roblox/roots/src/hooks/root-finished.luau b/dist/pesde/roblox/roots/src/hooks/root-finished.luau deleted file mode 100644 index d3519cea..00000000 --- a/dist/pesde/roblox/roots/src/hooks/root-finished.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootFinished(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootFinished = onRootFinished, -}) diff --git a/dist/pesde/roblox/roots/src/hooks/root-used.luau b/dist/pesde/roblox/roots/src/hooks/root-used.luau deleted file mode 100644 index 71f172cc..00000000 --- a/dist/pesde/roblox/roots/src/hooks/root-used.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self, subRoot: types.Root) -> () } = {} - -local function onRootUsed(listener: (root: types.Root, subRoot: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootUsed = onRootUsed, -}) diff --git a/dist/pesde/roblox/roots/src/index.d.ts b/dist/pesde/roblox/roots/src/index.d.ts deleted file mode 100644 index d8e100c5..00000000 --- a/dist/pesde/roblox/roots/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/dist/pesde/roblox/roots/src/init.luau b/dist/pesde/roblox/roots/src/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/dist/pesde/roblox/roots/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/dist/pesde/roblox/roots/src/logger.luau b/dist/pesde/roblox/roots/src/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/dist/pesde/roblox/roots/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { - useAfterDestroy = "Cannot use Root after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/pesde/roblox/roots/src/methods/start.luau b/dist/pesde/roblox/roots/src/methods/start.luau deleted file mode 100644 index 3f24dac5..00000000 --- a/dist/pesde/roblox/roots/src/methods/start.luau +++ /dev/null @@ -1,102 +0,0 @@ -local dependencies = require("../../dependencies") -local lifecycles = require("../../lifecycles") -local logger = require("../logger") -local providers = require("../../providers") -local rootFinished = require("../hooks/root-finished").callbacks -local rootStarted = require("../hooks/root-started").callbacks -local types = require("../types") - -local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: providers.Provider) - local lifecycleMethod = (provider :: any)[lifecycle.method] - if typeof(lifecycleMethod) == "function" then - -- local isProfiling = _G.PRVDMWRONG_PROFILE_LIFECYCLES - - -- if isProfiling then - -- lifecycle:register(function(...) - -- debug.profilebegin(memoryCategory) - -- debug.setmemorycategory(memoryCategory) - -- lifecycleMethod(provider, ...) - -- debug.resetmemorycategory() - -- debug.profileend() - -- end) - -- else - lifecycle:register(function(...) - lifecycleMethod(provider, ...) - end) - -- end - end -end - -local function nameOf(provider: providers.Provider, extension: string?): string - return if extension then `{tostring(provider)}.{extension}` else tostring(provider) -end - -local function start(root: types.Self): types.StartedRoot - local processed = dependencies.processDependencies(root._rootProviders) - local sortedProviders = processed.sortedDependencies :: { providers.Provider } - local processedLifecycles = processed.lifecycles - table.move(root._rootLifecycles, 1, #root._rootLifecycles, #processedLifecycles + 1, processedLifecycles) - - dependencies.sortByPriority(sortedProviders) - - local constructedProviders = {} - for _, provider in sortedProviders do - local providerDependencies = (provider :: any).dependencies - if typeof(providerDependencies) == "table" then - providerDependencies = table.clone(providerDependencies) - for key, value in providerDependencies do - providerDependencies[key] = constructedProviders[value] - end - end - - local constructed = provider.new(providerDependencies) - constructedProviders[provider] = constructed - bindLifecycle(root._start, constructed) - bindLifecycle(root._finish, constructed) - - for _, lifecycle in processedLifecycles do - bindLifecycle(lifecycle, constructed) - end - end - - local subRoots: { types.StartedRoot } = {} - for root in root._subRoots do - table.insert(subRoots, root:start()) - end - - root._start:fire() - - local startedRoot = {} :: types.StartedRoot - startedRoot.type = "StartedRoot" - - local didFinish = false - - function startedRoot:finish() - if didFinish then - return logger:fatalError({ template = logger.alreadyFinished }) - end - - didFinish = true - root._finish:fire() - - -- NOTE(znotfireman): Assume the user cleans up their own lifecycles - root._start:clear() - root._finish:clear() - - for _, subRoot in subRoots do - subRoot:finish() - end - - for _, hook in rootFinished do - hook(root) - end - end - - for _, hook in rootStarted do - hook(root) - end - - return startedRoot -end - -return start diff --git a/dist/pesde/roblox/roots/src/methods/use-lifecycle.luau b/dist/pesde/roblox/roots/src/methods/use-lifecycle.luau deleted file mode 100644 index 862c2d07..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-lifecycle.luau +++ /dev/null @@ -1,14 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycle(root: types.Self, lifecycle: lifecycles.Lifecycle) - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - return root -end - -return useLifecycle diff --git a/dist/pesde/roblox/roots/src/methods/use-module.luau b/dist/pesde/roblox/roots/src/methods/use-module.luau deleted file mode 100644 index a96b3d17..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-module.luau +++ /dev/null @@ -1,23 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModule(root: types.Self, module: ModuleScript) - local moduleExport = (require)(module) - - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - - return root -end - -return useModule diff --git a/dist/pesde/roblox/roots/src/methods/use-modules.luau b/dist/pesde/roblox/roots/src/methods/use-modules.luau deleted file mode 100644 index 8354a9d0..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-modules.luau +++ /dev/null @@ -1,28 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModules(root: types.Self, modules: { Instance }, predicate: ((module: ModuleScript) -> boolean)?) - for _, module in modules do - if not module:IsA("ModuleScript") or predicate and not predicate(module) then - continue - end - - local moduleExport = (require)(module) - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - end - - return root -end - -return useModules diff --git a/dist/pesde/roblox/roots/src/methods/use-provider.luau b/dist/pesde/roblox/roots/src/methods/use-provider.luau deleted file mode 100644 index 277d8049..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-provider.luau +++ /dev/null @@ -1,14 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProvider(root: types.Self, provider: providers.Provider) - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - return root -end - -return useProvider diff --git a/dist/pesde/roblox/roots/src/methods/use-root.luau b/dist/pesde/roblox/roots/src/methods/use-root.luau deleted file mode 100644 index efc4ad1e..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-root.luau +++ /dev/null @@ -1,13 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoot(root: types.Self, subRoot: types.Root) - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - return root -end - -return useRoot diff --git a/dist/pesde/roblox/roots/src/methods/use-roots.luau b/dist/pesde/roblox/roots/src/methods/use-roots.luau deleted file mode 100644 index 7b5b9dda..00000000 --- a/dist/pesde/roblox/roots/src/methods/use-roots.luau +++ /dev/null @@ -1,15 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoots(root: types.Self, subRoots: { types.Root }) - for _, subRoot in subRoots do - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - end - return root -end - -return useRoots diff --git a/dist/pesde/roblox/roots/src/types.luau b/dist/pesde/roblox/roots/src/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/dist/pesde/roblox/roots/src/types.luau +++ /dev/null @@ -1,40 +0,0 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") - -type Set = { [T]: true } - -export type Root = { - type: "Root", - - start: (root: Root) -> StartedRoot, - - useModule: (root: Root, module: ModuleScript) -> Root, - useModules: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useRoot: (root: Root, root: Root) -> Root, - useRoots: (root: Root, roots: { Root }) -> Root, - useProvider: (root: Root, provider: providers.Provider) -> Root, - useProviders: (root: Root, providers: { providers.Provider }) -> Root, - useLifecycle: (root: Root, lifecycle: lifecycles.Lifecycle) -> Root, - useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, - destroy: (root: Root) -> (), - - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, -} - -export type StartedRoot = { - type: "StartedRoot", - - finish: (root: StartedRoot) -> (), -} - -export type Self = Root & { - _destroyed: boolean, - _rootProviders: Set>, - _rootLifecycles: { lifecycles.Lifecycle }, - _subRoots: Set, - _start: lifecycles.Lifecycle<()>, - _finish: lifecycles.Lifecycle<()>, -} - -return nil diff --git a/dist/pesde/roblox/runtime/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/runtime/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/runtime/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/runtime/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/runtime/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/runtime/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/runtime/LICENSE.md b/dist/pesde/roblox/runtime/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/runtime/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/runtime/pesde.toml b/dist/pesde/roblox/runtime/pesde.toml deleted file mode 100644 index b4cfc6ad..00000000 --- a/dist/pesde/roblox/runtime/pesde.toml +++ /dev/null @@ -1,30 +0,0 @@ -authors = ["Fire "] -description = "Runtime agnostic libraries for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/runtime" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "roblox" -lib = "src/init.luau" -[dependencies] - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/runtime/src/batteries/threadpool.luau b/dist/pesde/roblox/runtime/src/batteries/threadpool.luau deleted file mode 100644 index 6caf08b4..00000000 --- a/dist/pesde/roblox/runtime/src/batteries/threadpool.luau +++ /dev/null @@ -1,38 +0,0 @@ -local task = require("../libs/task") - -local freeThreads: { thread } = {} - -local function run(f: (T...) -> (), thread: thread, ...) - f(...) - table.insert(freeThreads, thread) -end - -local function yielder() - while true do - run(coroutine.yield()) - end -end - -local function spawn(f: (T...) -> (), ...: T...) - local thread - if #freeThreads > 0 then - thread = freeThreads[#freeThreads] - freeThreads[#freeThreads] = nil - else - thread = coroutine.create(yielder) - coroutine.resume(thread) - end - - task.spawn(thread, f, thread, ...) -end - -local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args...) - for _, callback in callbacks do - spawn(callback, ...) - end -end - -return table.freeze({ - spawn = spawn, - spawnCallbacks = spawnCallbacks, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/init.luau b/dist/pesde/roblox/runtime/src/implementations/init.luau deleted file mode 100644 index 28dbe015..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/init.luau +++ /dev/null @@ -1,56 +0,0 @@ -local types = require("@self/../types") - -type Implementation = { new: (() -> T)?, implementation: T? } - -export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune" - -local supportedRuntimes = table.freeze({ - roblox = require("@self/roblox"), - luau = require("@self/luau"), - lune = require("@self/lune"), - lute = require("@self/lute"), - seal = require("@self/seal"), - zune = require("@self/zune"), -}) - -local currentRuntime: types.Runtime = nil -do - for _, runtime in supportedRuntimes :: { [string]: types.Runtime } do - local isRuntime = runtime.is() - if isRuntime then - local currentRuntimePriority = currentRuntime and currentRuntime.priority or 0 - local runtimePriority = runtime.priority or 0 - if currentRuntimePriority <= runtimePriority then - currentRuntime = runtime - end - end - end - assert(currentRuntime, "No supported runtime") -end - -local currentRuntimeName: RuntimeName = currentRuntime.name :: any - -local function notImplemented(functionName: string) - return function() - error(`'{functionName}' is not implemented by runtime '{currentRuntimeName}'`, 2) - end -end - -local function implementFunction(label: string, implementations: { [types.Runtime]: Implementation? }): T - local implementation = implementations[currentRuntime] - if implementation then - if implementation.new then - return implementation.new() - elseif implementation.implementation then - return implementation.implementation - end - end - return notImplemented(label) :: any -end - -return table.freeze({ - supportedRuntimes = supportedRuntimes, - currentRuntime = currentRuntime, - currentRuntimeName = currentRuntimeName, - implementFunction = implementFunction, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/init.spec.luau b/dist/pesde/roblox/runtime/src/implementations/init.spec.luau deleted file mode 100644 index 3ce91cbb..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/init.spec.luau +++ /dev/null @@ -1,81 +0,0 @@ -local implementations = require("@self/../implementations") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("currentRuntime", function() - test("detects lune runtime", function() - expect(implementations.currentRuntimeName).is("lune") - expect(implementations.currentRuntime).is(implementations.supportedRuntimes.lune) - end) - end) - - describe("implementFunction", function() - test("implements for lune runtime", function() - local lune = function() end - local luau = function() end - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - implementation = lune, - }, - [implementations.supportedRuntimes.luau] = { - implementation = luau, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - end) - - test("constructs for lune runtime", function() - local lune = function() end - local luau = function() end - - local constructedLune = false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - new = function() - constructedLune = true - return lune - end, - }, - [implementations.supportedRuntimes.luau] = { - new = function() - return luau - end, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - expect(constructedLune).is_true() - end) - - test("defaults to not implemented function", function() - local constructSuccess, runSuccess = false, false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.roblox] = { - new = function() - constructSuccess = true - return function() - runSuccess = true - end - end, - }, - }) - - expect(constructSuccess).is(false) - expect(implementation).is_a("function") - expect(implementation).fails_with("'implementation' is not implemented by runtime 'lune'") - expect(runSuccess).is(false) - end) - end) -end diff --git a/dist/pesde/roblox/runtime/src/implementations/luau.luau b/dist/pesde/roblox/runtime/src/implementations/luau.luau deleted file mode 100644 index c67e52f4..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/luau.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "luau", - priority = -1, - is = function() - return true - end, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/lune.luau b/dist/pesde/roblox/runtime/src/implementations/lune.luau deleted file mode 100644 index f49834eb..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/lune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local LUNE_VERSION_FORMAT = "(Lune) (%d+%.%d+%.%d+.*)+(%d+)" - -return types.Runtime({ - name = "lune", - is = function() - return string.match(_VERSION, LUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/lute.luau b/dist/pesde/roblox/runtime/src/implementations/lute.luau deleted file mode 100644 index 7b6abc58..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/lute.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "lute", - is = function() - return false - end, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/roblox.luau b/dist/pesde/roblox/runtime/src/implementations/roblox.luau deleted file mode 100644 index 91a780e2..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/roblox.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "roblox", - is = function() - -- wtf - return not not (_VERSION == "Luau" and game and workspace) - end, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/seal.luau b/dist/pesde/roblox/runtime/src/implementations/seal.luau deleted file mode 100644 index 0a72684c..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/seal.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "seal", - is = function() - return false - end, -}) diff --git a/dist/pesde/roblox/runtime/src/implementations/zune.luau b/dist/pesde/roblox/runtime/src/implementations/zune.luau deleted file mode 100644 index 48243e05..00000000 --- a/dist/pesde/roblox/runtime/src/implementations/zune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local ZUNE_VERSION_FORMAT = "(Zune) (%d+%.%d+%.%d+.*)+(%d+%.%d+)" - -return types.Runtime({ - name = "zune", - is = function() - return string.match(_VERSION, ZUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/pesde/roblox/runtime/src/index.d.ts b/dist/pesde/roblox/runtime/src/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/dist/pesde/roblox/runtime/src/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/dist/pesde/roblox/runtime/src/init.luau b/dist/pesde/roblox/runtime/src/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/dist/pesde/roblox/runtime/src/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/dist/pesde/roblox/runtime/src/libs/task.luau b/dist/pesde/roblox/runtime/src/libs/task.luau deleted file mode 100644 index 28c1ac9e..00000000 --- a/dist/pesde/roblox/runtime/src/libs/task.luau +++ /dev/null @@ -1,157 +0,0 @@ -local implementations = require("../implementations") - -export type TaskLib = { - cancel: (thread) -> (), - defer: (functionOrThread: thread | (T...) -> (), T...) -> thread, - delay: (duration: number, functionOrThread: thread | (T...) -> (), T...) -> thread, - spawn: (functionOrThread: thread | (T...) -> (), T...) -> thread, - wait: (duration: number?) -> number, -} - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function defaultSpawn(functionOrThread: thread | (T...) -> (), ...: T...): thread - if type(functionOrThread) == "thread" then - coroutine.resume(functionOrThread, ...) - return functionOrThread - else - local thread = coroutine.create(functionOrThread) - coroutine.resume(thread, ...) - return thread - end -end - -local function defaultWait(seconds: number?) - local startTime = os.clock() - local endTime = startTime + (seconds or 1) - local clockTime: number - repeat - clockTime = os.clock() - until clockTime >= endTime - return clockTime - startTime -end - -local task: TaskLib = table.freeze({ - cancel = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.cancel - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").cancel - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").cancel - end, - }, - [supportedRuntimes.luau] = { - implementation = function(thread) - if not coroutine.close(thread) then - error(debug.traceback(thread, "Could not cancel thread")) - end - end, - }, - }), - defer = implementFunction("task.defer", { - [supportedRuntimes.roblox] = { - new = function() - return task.defer :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").defer - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").defer - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - delay = implementFunction("task.delay", { - [supportedRuntimes.roblox] = { - new = function() - return task.delay :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").delay - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").delay - end, - }, - [supportedRuntimes.luau] = { - implementation = function(duration: number, functionOrThread: thread | (T...) -> (), ...: T...): thread - return defaultSpawn( - if typeof(functionOrThread) == "function" - then function(duration, functionOrThread, ...) - defaultWait(duration) - functionOrThread(...) - end - else function(duration, functionOrThread, ...) - defaultWait(duration) - coroutine.resume(...) - end, - duration, - functionOrThread, - ... - ) - end, - }, - }), - spawn = implementFunction("task.spawn", { - [supportedRuntimes.roblox] = { - new = function() - return task.spawn :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").spawn - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").spawn - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - wait = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.wait - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").wait - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").wait - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultWait, - }, - }), -}) - -return task diff --git a/dist/pesde/roblox/runtime/src/libs/task.spec.luau b/dist/pesde/roblox/runtime/src/libs/task.spec.luau deleted file mode 100644 index 0918e87f..00000000 --- a/dist/pesde/roblox/runtime/src/libs/task.spec.luau +++ /dev/null @@ -1,62 +0,0 @@ -local luneTask = require("@lune/task") -local task = require("./task") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - --- FIXME: can't async stuff lol -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("task", function() - test("spawn", function() - expect(task.spawn).is(luneTask.spawn) - local spawned = false - - task.spawn(function() - spawned = true - end) - - expect(spawned).is_true() - end) - - test("defer", function() - expect(task.defer).is(luneTask.defer) - - -- local spawned = false - - -- task.defer(function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - end) - - test("delay", function() - expect(task.delay).is(luneTask.delay) - -- local spawned = false - - -- task.delay(0.25, function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - - -- local startTime = os.clock() - -- repeat - -- until os.clock() - startTime > 0.5 - - -- print(spawned) - - -- expect(spawned).is_true() - end) - - test("wait", function() - expect(task.wait).is(luneTask.wait) - end) - - test("cancel", function() - expect(task.cancel).is(luneTask.cancel) - end) - end) -end diff --git a/dist/pesde/roblox/runtime/src/libs/warn.luau b/dist/pesde/roblox/runtime/src/libs/warn.luau deleted file mode 100644 index 6a4837ac..00000000 --- a/dist/pesde/roblox/runtime/src/libs/warn.luau +++ /dev/null @@ -1,27 +0,0 @@ -local implementations = require("../implementations") - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function tostringTuple(...: any) - local stringified = {} - for index = 1, select("#", ...) do - table.insert(stringified, tostring(select(index, ...))) - end - return table.concat(stringified, " ") -end - -local warn: (T...) -> () = implementFunction("warn", { - [supportedRuntimes.roblox] = { - new = function() - return warn - end, - }, - [supportedRuntimes.luau] = { - implementation = function(...: T...) - print(`\27[0;33m{tostringTuple(...)}\27[0m`) - end, - }, -}) - -return warn diff --git a/dist/pesde/roblox/runtime/src/types.luau b/dist/pesde/roblox/runtime/src/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/dist/pesde/roblox/runtime/src/types.luau +++ /dev/null @@ -1,13 +0,0 @@ -export type Runtime = { - name: string, - priority: number?, - is: () -> boolean, -} - -local function Runtime(x: Runtime) - return table.freeze(x) -end - -return table.freeze({ - Runtime = Runtime, -}) diff --git a/dist/pesde/roblox/typecheckers/.pesde/scripts/roblox_sync_config_generator.luau b/dist/pesde/roblox/typecheckers/.pesde/scripts/roblox_sync_config_generator.luau deleted file mode 100644 index 8aa75020..00000000 --- a/dist/pesde/roblox/typecheckers/.pesde/scripts/roblox_sync_config_generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/roblox_sync_config_generator") diff --git a/dist/pesde/roblox/typecheckers/.pesde/scripts/sourcemap-generator.luau b/dist/pesde/roblox/typecheckers/.pesde/scripts/sourcemap-generator.luau deleted file mode 100644 index ba9144a3..00000000 --- a/dist/pesde/roblox/typecheckers/.pesde/scripts/sourcemap-generator.luau +++ /dev/null @@ -1 +0,0 @@ -return (require)("./../../lune_packages/.pesde/pesde+scripts_rojo/0.1.0/scripts_rojo/sourcemap_generator") diff --git a/dist/pesde/roblox/typecheckers/LICENSE.md b/dist/pesde/roblox/typecheckers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/pesde/roblox/typecheckers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/pesde/roblox/typecheckers/pesde.toml b/dist/pesde/roblox/typecheckers/pesde.toml deleted file mode 100644 index 83bc60a1..00000000 --- a/dist/pesde/roblox/typecheckers/pesde.toml +++ /dev/null @@ -1,30 +0,0 @@ -authors = ["Fire "] -description = "Typechecking primitives and compatibility for Prvd 'M Wrong" -includes = [ - "src/**/*.luau", - "LICENSE.md", - "README.md", - "pesde.toml", -] -license = "MPL-2.0" -name = "prvdmwrong/typecheckers" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[indices] -default = "https://github.com/pesde-pkg/index" - -[target] -build_files = ["src"] -environment = "roblox" -lib = "src/init.luau" -[dependencies] - - [scripts] - roblox_sync_config_generator = ".pesde/scripts/roblox_sync_config_generator.luau" - sourcemap_generator = ".pesde/scripts/sourcemap_generator.luau" - - [dev_dependencies] - scripts = { name = "pesde/scripts_rojo", version = "^0.1.0", target = "lune" } - rojo = { name = "pesde/rojo", version = "^7.4.4", target = "lune" } - \ No newline at end of file diff --git a/dist/pesde/roblox/typecheckers/src/init.luau b/dist/pesde/roblox/typecheckers/src/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/wally/dependencies/LICENSE.md b/dist/wally/dependencies/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/dependencies/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/dependencies/Wally.toml b/dist/wally/dependencies/Wally.toml deleted file mode 100644 index 88dc8fb1..00000000 --- a/dist/wally/dependencies/Wally.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -authors = ["Fire "] -description = "Dependency resolution logic for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/dependencies" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -lifecycles = "prvdmwrong/lifecycles@0.2.0-rc.4" -logger = "prvdmwrong/logger@0.2.0-rc.4" diff --git a/dist/wally/dependencies/lifecycles.luau b/dist/wally/dependencies/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/wally/dependencies/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/wally/dependencies/logger.luau b/dist/wally/dependencies/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/wally/dependencies/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/wally/dependencies/src/depend.luau b/dist/wally/dependencies/src/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/dist/wally/dependencies/src/depend.luau +++ /dev/null @@ -1,30 +0,0 @@ -local logger = require("./logger") -local types = require("./types") - -local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) -end - -local unresolvedMt = { - __metatable = "This metatable is locked.", - __index = useBeforeConstructed, - __newindex = useBeforeConstructed, -} - -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end - --- Wtf luau -local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( - (nil :: any) :: Dependencies, - ... -)) - -- Return a mock value that will be resolved during dependency resolution. - return setmetatable({ - type = "UnresolvedDependency", - dependency = dependency, - }, unresolvedMt) :: any -end - -return depend diff --git a/dist/wally/dependencies/src/index.d.ts b/dist/wally/dependencies/src/index.d.ts deleted file mode 100644 index a5bddcde..00000000 --- a/dist/wally/dependencies/src/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "../lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/dist/wally/dependencies/src/init.luau b/dist/wally/dependencies/src/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/dist/wally/dependencies/src/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/dist/wally/dependencies/src/logger.luau b/dist/wally/dependencies/src/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/dist/wally/dependencies/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { - useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/wally/dependencies/src/process-dependencies.luau b/dist/wally/dependencies/src/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/dist/wally/dependencies/src/process-dependencies.luau +++ /dev/null @@ -1,57 +0,0 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") - -export type ProccessDependencyResult = { - sortedDependencies: { types.Dependency }, - lifecycles: { lifecycles.Lifecycle }, -} - -type Set = { [T]: true } - -local function processDependencies(dependencies: Set>): ProccessDependencyResult - local sortedDependencies = {} - local lifecycles = {} - - -- TODO: optimize ts - local function visitDependency(dependency: types.Dependency) - -- print("Visiting dependency", dependency) - - for key, value in dependency :: any do - if key == "dependencies" then - -- print("Checking [prvd.dependencies]") - if typeof(value) == "table" then - for key, value in value do - -- print("Checking key", key, "value", value) - if typeof(value) == "table" and value.type == "UnresolvedDependency" then - local unresolved: types.UnresolvedDependency = value - -- print("Got unresolved dependency", unresolved.dependency, "visiting") - visitDependency(unresolved.dependency) - end - end - end - - continue - end - - if typeof(value) == "table" and value.type == "Lifecycle" and not table.find(lifecycles, value) then - table.insert(lifecycles, value) - end - end - - if dependencies[dependency] and not table.find(sortedDependencies, dependency) then - -- print("Pushing to sort") - table.insert(sortedDependencies, dependency) - end - end - - for dependency in dependencies do - visitDependency(dependency) - end - - return { - sortedDependencies = sortedDependencies, - lifecycles = lifecycles, - } -end - -return processDependencies diff --git a/dist/wally/dependencies/src/process-dependencies.spec.luau b/dist/wally/dependencies/src/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/dist/wally/dependencies/src/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/dist/wally/dependencies/src/sort-by-priority.luau b/dist/wally/dependencies/src/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/dist/wally/dependencies/src/sort-by-priority.luau +++ /dev/null @@ -1,14 +0,0 @@ -local types = require("./types") - -local function sortByPriority(dependencies: { types.Dependency }) - table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end - local leftIndex = table.find(dependencies, left) - local rightIndex = table.find(dependencies, right) - return leftIndex < rightIndex - end) -end - -return sortByPriority diff --git a/dist/wally/dependencies/src/sort-by-priority.spec.luau b/dist/wally/dependencies/src/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/dist/wally/dependencies/src/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/dist/wally/dependencies/src/types.luau b/dist/wally/dependencies/src/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/dist/wally/dependencies/src/types.luau +++ /dev/null @@ -1,14 +0,0 @@ -export type Dependency = Self & { - dependencies: Dependencies, - priority: number?, - new: (dependencies: Dependencies, NewArgs...) -> Dependency, -} - -export type UnresolvedDependency = { - type: "UnresolvedDependency", - dependency: Dependency, -} - -export type dependencies = { __prvdmwrong_dependencies: never } - -return nil diff --git a/dist/wally/lifecycles/LICENSE.md b/dist/wally/lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/lifecycles/Wally.toml b/dist/wally/lifecycles/Wally.toml deleted file mode 100644 index 9a305d68..00000000 --- a/dist/wally/lifecycles/Wally.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -authors = ["Fire "] -description = "Provider method lifecycles implementation for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/lifecycles" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -logger = "prvdmwrong/logger@0.2.0-rc.4" -runtime = "prvdmwrong/runtime@0.2.0-rc.4" diff --git a/dist/wally/lifecycles/logger.luau b/dist/wally/lifecycles/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/wally/lifecycles/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/wally/lifecycles/runtime.luau b/dist/wally/lifecycles/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/wally/lifecycles/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/wally/lifecycles/src/create.luau b/dist/wally/lifecycles/src/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/dist/wally/lifecycles/src/create.luau +++ /dev/null @@ -1,45 +0,0 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") - -local function create( - method: string, - onFire: (lifecycle: types.Lifecycle, Args...) -> () -): types.Lifecycle - local self: types.Self = { - _isDestroyed = false, - _selfRegistered = {}, - _selfUnregistered = {}, - - type = "Lifecycle", - callbacks = {}, - - fire = onFire, - method = method, - register = register, - unregister = unregister, - clear = clear, - onRegistered = onRegistered, - onUnregistered = onUnregistered, - await = await, - destroy = destroy, - } :: any - - methodToLifecycles[method] = methodToLifecycles[method] or {} - table.insert(methodToLifecycles[method], self) - - for _, onLifecycleConstructed in lifecycleConstructed.callbacks do - onLifecycleConstructed(self :: types.Lifecycle) - end - - return self -end - -return create diff --git a/dist/wally/lifecycles/src/handlers/fire-concurrent.luau b/dist/wally/lifecycles/src/handlers/fire-concurrent.luau deleted file mode 100644 index f279b888..00000000 --- a/dist/wally/lifecycles/src/handlers/fire-concurrent.luau +++ /dev/null @@ -1,10 +0,0 @@ -local runtime = require("../../runtime") -local types = require("../types") - -local function fireConcurrent(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - runtime.threadpool.spawn(callback, ...) - end -end - -return fireConcurrent diff --git a/dist/wally/lifecycles/src/handlers/fire-sequential.luau b/dist/wally/lifecycles/src/handlers/fire-sequential.luau deleted file mode 100644 index 80911ad9..00000000 --- a/dist/wally/lifecycles/src/handlers/fire-sequential.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -local function fireSequential(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - callback(...) - end -end - -return fireSequential diff --git a/dist/wally/lifecycles/src/hooks/lifecycle-constructed.luau b/dist/wally/lifecycles/src/hooks/lifecycle-constructed.luau deleted file mode 100644 index 8ea4d81b..00000000 --- a/dist/wally/lifecycles/src/hooks/lifecycle-constructed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleConstructed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleConstructed = onLifecycleConstructed, -}) diff --git a/dist/wally/lifecycles/src/hooks/lifecycle-destroyed.luau b/dist/wally/lifecycles/src/hooks/lifecycle-destroyed.luau deleted file mode 100644 index 47abcfab..00000000 --- a/dist/wally/lifecycles/src/hooks/lifecycle-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleDestroyed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleDestroyed = onLifecycleDestroyed, -}) diff --git a/dist/wally/lifecycles/src/hooks/lifecycle-registered.luau b/dist/wally/lifecycles/src/hooks/lifecycle-registered.luau deleted file mode 100644 index fab588a3..00000000 --- a/dist/wally/lifecycles/src/hooks/lifecycle-registered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleRegistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleRegistered = onLifecycleRegistered, -}) diff --git a/dist/wally/lifecycles/src/hooks/lifecycle-unregistered.luau b/dist/wally/lifecycles/src/hooks/lifecycle-unregistered.luau deleted file mode 100644 index 0ec81756..00000000 --- a/dist/wally/lifecycles/src/hooks/lifecycle-unregistered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleUnregistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUnregistered = onLifecycleUnregistered, -}) diff --git a/dist/wally/lifecycles/src/index.d.ts b/dist/wally/lifecycles/src/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/dist/wally/lifecycles/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/dist/wally/lifecycles/src/init.luau b/dist/wally/lifecycles/src/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/dist/wally/lifecycles/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/dist/wally/lifecycles/src/logger.luau b/dist/wally/lifecycles/src/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/dist/wally/lifecycles/src/logger.luau +++ /dev/null @@ -1,6 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { - useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", -}) diff --git a/dist/wally/lifecycles/src/method-to-lifecycles.luau b/dist/wally/lifecycles/src/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/dist/wally/lifecycles/src/method-to-lifecycles.luau +++ /dev/null @@ -1,5 +0,0 @@ -local types = require("./types") - -local methodToLifecycles: { [string]: { types.Lifecycle } } = {} - -return methodToLifecycles diff --git a/dist/wally/lifecycles/src/methods/await.luau b/dist/wally/lifecycles/src/methods/await.luau deleted file mode 100644 index ed8299d6..00000000 --- a/dist/wally/lifecycles/src/methods/await.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function await(lifecycle: types.Self): Args... - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local currentThread = coroutine.running() - local function callback(...: Args...) - lifecycle:unregister(callback) - coroutine.resume(currentThread, ...) - end - lifecycle:register(callback) - return coroutine.yield() -end - -return await diff --git a/dist/wally/lifecycles/src/methods/destroy.luau b/dist/wally/lifecycles/src/methods/destroy.luau deleted file mode 100644 index d9d5d6cc..00000000 --- a/dist/wally/lifecycles/src/methods/destroy.luau +++ /dev/null @@ -1,18 +0,0 @@ -local lifecycleDestroyed = require("../hooks/lifecycle-destroyed") -local logger = require("../logger") -local methodToLifecycles = require("../method-to-lifecycles") -local types = require("../types") - -local function destroy(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - table.remove(methodToLifecycles[lifecycle.method], table.find(methodToLifecycles[lifecycle.method], lifecycle)) - table.clear(lifecycle.callbacks) - for _, callback in lifecycleDestroyed.callbacks do - callback(lifecycle) - end - lifecycle._isDestroyed = true -end - -return destroy diff --git a/dist/wally/lifecycles/src/methods/on-registered.luau b/dist/wally/lifecycles/src/methods/on-registered.luau deleted file mode 100644 index 7ddb009a..00000000 --- a/dist/wally/lifecycles/src/methods/on-registered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onRegistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end - table.insert(lifecycle._selfRegistered, listener) - return function() - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end -end - -return onRegistered diff --git a/dist/wally/lifecycles/src/methods/on-unregistered.luau b/dist/wally/lifecycles/src/methods/on-unregistered.luau deleted file mode 100644 index 842040ec..00000000 --- a/dist/wally/lifecycles/src/methods/on-unregistered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onUnregistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end - table.insert(lifecycle._selfUnregistered, listener) - return function() - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end -end - -return onUnregistered diff --git a/dist/wally/lifecycles/src/methods/register.luau b/dist/wally/lifecycles/src/methods/register.luau deleted file mode 100644 index 3fd74d56..00000000 --- a/dist/wally/lifecycles/src/methods/register.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function register(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle.callbacks, table.find(lifecycle.callbacks, callback)) - end - table.insert(lifecycle.callbacks, callback) - threadpool.spawnCallbacks(lifecycle._selfRegistered, callback) -end - -return register diff --git a/dist/wally/lifecycles/src/methods/unregister-all.luau b/dist/wally/lifecycles/src/methods/unregister-all.luau deleted file mode 100644 index 5e6235af..00000000 --- a/dist/wally/lifecycles/src/methods/unregister-all.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function clear(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - for _, callback in lifecycle.callbacks do - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end - table.clear(lifecycle.callbacks) -end - -return clear diff --git a/dist/wally/lifecycles/src/methods/unregister.luau b/dist/wally/lifecycles/src/methods/unregister.luau deleted file mode 100644 index 0ca7223f..00000000 --- a/dist/wally/lifecycles/src/methods/unregister.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function unregister(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local index = table.find(lifecycle.callbacks, callback) - if index then - table.remove(lifecycle.callbacks, index) - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end -end - -return unregister diff --git a/dist/wally/lifecycles/src/types.luau b/dist/wally/lifecycles/src/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/dist/wally/lifecycles/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Lifecycle = { - type: "Lifecycle", - - callbacks: { (Args...) -> () }, - method: string, - - register: (self: Lifecycle, callback: (Args...) -> ()) -> (), - fire: (self: Lifecycle, Args...) -> (), - unregister: (self: Lifecycle, callback: (Args...) -> ()) -> (), - clear: (self: Lifecycle) -> (), - onRegistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - onUnregistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - await: (self: Lifecycle) -> Args..., - destroy: (self: Lifecycle) -> (), -} - -export type Self = Lifecycle & { - _isDestroyed: boolean, - _selfRegistered: { (callback: (Args...) -> ()) -> () }, - _selfUnregistered: { (callback: (Args...) -> ()) -> () }, -} - -return nil diff --git a/dist/wally/logger/LICENSE.md b/dist/wally/logger/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/logger/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/logger/Wally.toml b/dist/wally/logger/Wally.toml deleted file mode 100644 index 15b4cdc3..00000000 --- a/dist/wally/logger/Wally.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -authors = ["Fire "] -description = "Logging for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/logger" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -runtime = "prvdmwrong/runtime@0.2.0-rc.4" diff --git a/dist/wally/logger/runtime.luau b/dist/wally/logger/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/wally/logger/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/wally/logger/src/allow-web-links.luau b/dist/wally/logger/src/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/dist/wally/logger/src/allow-web-links.luau +++ /dev/null @@ -1,5 +0,0 @@ -local runtime = require("../runtime") - -local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true - -return allowWebLinks diff --git a/dist/wally/logger/src/create.luau b/dist/wally/logger/src/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/dist/wally/logger/src/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/dist/wally/logger/src/format-log.luau b/dist/wally/logger/src/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/dist/wally/logger/src/format-log.luau +++ /dev/null @@ -1,43 +0,0 @@ -local types = require("./types") - -local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string - local formattedTemplate = string.format(log.template, table.unpack(log)) - - local error = log.error - local trace: string? = log.trace - - if error then - trace = error.trace - formattedTemplate = string.gsub(formattedTemplate, "ERROR_MESSAGE", error.message) - end - - local id: string? - - -- TODO: find a better way to do ts while still being ergonomic - for templateKey, template in (self :: any) :: { [string]: string } do - if template == log.template then - id = templateKey - break - end - end - - if id then - formattedTemplate ..= `\nID: {id}` - end - - if errorInfoUrl then - formattedTemplate ..= `\nLearn more: {errorInfoUrl}` - if id then - formattedTemplate ..= `#{string.lower(id)}` - end - end - - if trace then - formattedTemplate ..= `\n---- Stack trace ----\n{trace}` - end - - -- Labels are added from createLogger, so we don't add it here - return string.gsub(formattedTemplate, "\n", "\n ") -end - -return formatLog diff --git a/dist/wally/logger/src/index.d.ts b/dist/wally/logger/src/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/dist/wally/logger/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/dist/wally/logger/src/init.luau b/dist/wally/logger/src/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/dist/wally/logger/src/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/dist/wally/logger/src/parse-error.luau b/dist/wally/logger/src/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/dist/wally/logger/src/parse-error.luau +++ /dev/null @@ -1,12 +0,0 @@ -local types = require("./types") - -local function parseError(err: string): types.Error - return { - type = "Error", - raw = err, - message = err:gsub("^.+:%d+:%s*", ""), - trace = debug.traceback(nil, 2), - } -end - -return parseError diff --git a/dist/wally/logger/src/standard-error-info-url.luau b/dist/wally/logger/src/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/dist/wally/logger/src/standard-error-info-url.luau +++ /dev/null @@ -1,5 +0,0 @@ -local function standardErrorInfoUrl(label: string): string - return `https://prvdmwrong.luau.page/api-reference/{label}/errors` -end - -return standardErrorInfoUrl diff --git a/dist/wally/logger/src/types.luau b/dist/wally/logger/src/types.luau deleted file mode 100644 index d1699037..00000000 --- a/dist/wally/logger/src/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Error = { - type: "Error", - raw: string, - message: string, - trace: string, -} - -export type Log = { - template: string, - error: Error?, - trace: string?, - [number]: unknown, -} - -export type Logger = Templates & { - type: "Logger", - print: (self: Logger, props: Log) -> (), - warn: (self: Logger, props: Log) -> (), - error: (self: Logger, props: Log) -> (), - fatalError: (self: Logger, props: Log) -> never, -} - -return nil diff --git a/dist/wally/providers/LICENSE.md b/dist/wally/providers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/providers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/providers/Wally.toml b/dist/wally/providers/Wally.toml deleted file mode 100644 index 1299a231..00000000 --- a/dist/wally/providers/Wally.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -authors = ["Fire "] -description = "Provider creation for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/providers" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -dependencies = "prvdmwrong/dependencies@0.2.0-rc.4" -lifecycles = "prvdmwrong/lifecycles@0.2.0-rc.4" -logger = "prvdmwrong/logger@0.2.0-rc.4" -runtime = "prvdmwrong/runtime@0.2.0-rc.4" diff --git a/dist/wally/providers/dependencies.luau b/dist/wally/providers/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/wally/providers/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/wally/providers/lifecycles.luau b/dist/wally/providers/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/wally/providers/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/wally/providers/logger.luau b/dist/wally/providers/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/wally/providers/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/wally/providers/runtime.luau b/dist/wally/providers/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/wally/providers/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/wally/providers/src/create.luau b/dist/wally/providers/src/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/dist/wally/providers/src/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/dist/wally/providers/src/index.d.ts b/dist/wally/providers/src/index.d.ts deleted file mode 100644 index 2ab36e15..00000000 --- a/dist/wally/providers/src/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "../dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/dist/wally/providers/src/init.luau b/dist/wally/providers/src/init.luau deleted file mode 100644 index d678d850..00000000 --- a/dist/wally/providers/src/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/dist/wally/providers/src/name-of.luau b/dist/wally/providers/src/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/dist/wally/providers/src/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/dist/wally/providers/src/provider-classes.luau b/dist/wally/providers/src/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/dist/wally/providers/src/provider-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local providerClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return providerClasses diff --git a/dist/wally/providers/src/types.luau b/dist/wally/providers/src/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/dist/wally/providers/src/types.luau +++ /dev/null @@ -1,12 +0,0 @@ -local dependencies = require("../dependencies") - -export type Provider = dependencies.Dependency, - __tostring: (self: Provider) -> string, - name: string?, - constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, -}, Dependencies> - -return nil diff --git a/dist/wally/prvdmwrong/LICENSE.md b/dist/wally/prvdmwrong/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/prvdmwrong/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/prvdmwrong/Wally.toml b/dist/wally/prvdmwrong/Wally.toml deleted file mode 100644 index 1f4e3fac..00000000 --- a/dist/wally/prvdmwrong/Wally.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -authors = ["Fire "] -description = "Entry point to Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/prvdmwrong" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -dependencies = "prvdmwrong/dependencies@0.2.0-rc.4" -lifecycles = "prvdmwrong/lifecycles@0.2.0-rc.4" -providers = "prvdmwrong/providers@0.2.0-rc.4" -roots = "prvdmwrong/roots@0.2.0-rc.4" diff --git a/dist/wally/prvdmwrong/dependencies.luau b/dist/wally/prvdmwrong/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/wally/prvdmwrong/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/wally/prvdmwrong/lifecycles.luau b/dist/wally/prvdmwrong/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/wally/prvdmwrong/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/wally/prvdmwrong/providers.luau b/dist/wally/prvdmwrong/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/wally/prvdmwrong/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/wally/prvdmwrong/roots.luau b/dist/wally/prvdmwrong/roots.luau deleted file mode 100644 index c606c7bd..00000000 --- a/dist/wally/prvdmwrong/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./Packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/wally/prvdmwrong/src/index.d.ts b/dist/wally/prvdmwrong/src/index.d.ts deleted file mode 100644 index 2058129c..00000000 --- a/dist/wally/prvdmwrong/src/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "../dependencies"; -import lifecycles from "../lifecycles"; -import providers from "../providers"; -import roots from "../roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/dist/wally/prvdmwrong/src/init.luau b/dist/wally/prvdmwrong/src/init.luau deleted file mode 100644 index 1381801d..00000000 --- a/dist/wally/prvdmwrong/src/init.luau +++ /dev/null @@ -1,45 +0,0 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") - -export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle -export type Root = roots.Root -export type StartedRoot = roots.StartedRoot - -local prvd = { - provider = providers.create, - root = roots.create, - depend = dependencies.depend, - nameOf = providers.nameOf, - - lifecycle = lifecycles.create, - fireConcurrent = lifecycles.handlers.fireConcurrent, - fireSequential = lifecycles.handlers.fireSequential, - - hooks = table.freeze({ - onProviderUsed = roots.hooks.onProviderUsed, - onLifecycleUsed = roots.hooks.onLifecycleUsed, - onRootConstructing = roots.hooks.onRootConstructing, - onRootUsed = roots.hooks.onRootUsed, - onRootStarted = roots.hooks.onRootStarted, - onRootFinished = roots.hooks.onRootFinished, - onRootDestroyed = roots.hooks.onRootDestroyed, - - onLifecycleConstructed = lifecycles.hooks.onLifecycleConstructed, - onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, - onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, - onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), -} - -type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) - -local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -local module: PrvdModule = setmetatable(prvd, mt) :: any -return module diff --git a/dist/wally/rbx-components/LICENSE.md b/dist/wally/rbx-components/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/rbx-components/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/rbx-components/Wally.toml b/dist/wally/rbx-components/Wally.toml deleted file mode 100644 index 5c89a9ff..00000000 --- a/dist/wally/rbx-components/Wally.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -authors = ["Fire "] -description = "Component functionality for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/rbx-components" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -dependencies = "prvdmwrong/dependencies@0.2.0-rc.4" -logger = "prvdmwrong/logger@0.2.0-rc.4" -providers = "prvdmwrong/providers@0.2.0-rc.4" -roots = "prvdmwrong/roots@0.2.0-rc.4" diff --git a/dist/wally/rbx-components/dependencies.luau b/dist/wally/rbx-components/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/wally/rbx-components/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/wally/rbx-components/logger.luau b/dist/wally/rbx-components/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/wally/rbx-components/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/wally/rbx-components/providers.luau b/dist/wally/rbx-components/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/wally/rbx-components/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/wally/rbx-components/roots.luau b/dist/wally/rbx-components/roots.luau deleted file mode 100644 index c606c7bd..00000000 --- a/dist/wally/rbx-components/roots.luau +++ /dev/null @@ -1,4 +0,0 @@ -local DEPENDENCY = require("./Packages/roots") -export type Root = DEPENDENCY.Root -export type StartedRoot = DEPENDENCY.StartedRoot -return DEPENDENCY diff --git a/dist/wally/rbx-components/src/component-classes.luau b/dist/wally/rbx-components/src/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/dist/wally/rbx-components/src/component-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local componentClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return componentClasses diff --git a/dist/wally/rbx-components/src/component-provider.luau b/dist/wally/rbx-components/src/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/dist/wally/rbx-components/src/component-provider.luau +++ /dev/null @@ -1,185 +0,0 @@ -local CollectionService = game:GetService("CollectionService") - -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") - -local threadpool = runtime.threadpool - -type Set = { [T]: true } -type ConstructedComponent = types.AnyComponent -type LuauBug = any - -local ComponentProvider = {} -ComponentProvider.priority = -math.huge -ComponentProvider.name = "@rbx-components" - -function ComponentProvider.constructor(self: ComponentProvider) - self.componentClasses = {} :: Set - self.tagToComponentClasses = {} :: { [string]: Set } - self.instanceToComponents = {} :: { [Instance]: { [types.AnyComponent]: ConstructedComponent } } - self.componentToInstances = {} :: { [types.AnyComponent]: Set? } - self.constructedToClass = {} :: { [ConstructedComponent]: types.AnyComponent? } - - self._destroyingConnections = {} :: { [Instance]: RBXScriptConnection } - self._connections = {} :: { RBXScriptConnection } -end - -function ComponentProvider.start(self: ComponentProvider) - for tag, components in self.tagToComponentClasses do - local function onTagAdded(instance) - local instanceToComponents = self.instanceToComponents[instance] - if not instanceToComponents then - instanceToComponents = {} - self.instanceToComponents[instance] = instanceToComponents - end - - for componentClass in components do - if - (componentClass.blacklistInstances and (componentClass.blacklistInstances :: LuauBug)[instance]) - or (componentClass.whitelistInstances and not (componentClass.whitelistInstances :: LuauBug)[instance]) - or (componentClass.instanceCheck and not componentClass.instanceCheck(instance)) - then - continue - end - - local component: ConstructedComponent = instanceToComponents[componentClass] - if not component then - component = componentClass.new(instance) - instanceToComponents[componentClass] = component - self.constructedToClass[component :: any] = componentClass - end - - if component.added then - component:added() - end - end - - if not self._destroyingConnections[instance] then - self._destroyingConnections[instance] = instance.Destroying:Once(function() - for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end - end - table.clear(instanceToComponents) - self.instanceToComponents[instance] = nil - end) - end - end - - table.insert(self._connections, CollectionService:GetInstanceAddedSignal(tag):Connect(onTagAdded)) - table.insert(self._connections, CollectionService:GetInstanceRemovedSignal(tag):Connect(function(instance) end)) - - for _, instance in CollectionService:GetTagged(tag) do - onTagAdded(instance) - end - end -end - -function ComponentProvider.destroy(self: ComponentProvider) - for _, components in self.instanceToComponents do - for _, component in components do - if component.destroy then - component:destroy() - end - end - table.clear(components) - end - - table.clear(self.componentClasses) - table.clear(self.tagToComponentClasses) - table.clear(self.instanceToComponents) - table.clear(self.componentToInstances) - table.clear(self.constructedToClass) - - for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end - end - - for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end - end - - table.clear(self._connections) - table.clear(self._destroyingConnections) -end - -function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end - - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end - - if class.tag then - local tagToComponentClasses = self.tagToComponentClasses[class.tag] - - if tagToComponentClasses then - if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) - end - else - tagToComponentClasses = {} - self.tagToComponentClasses[class.tag] = tagToComponentClasses - end - - (tagToComponentClasses :: any)[class] = true - end - - self.componentClasses[class] = true - self.componentToInstances[class] = {} -end - -function ComponentProvider.getFromInstance( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - return self.instanceToComponents[instance :: any][class] -end - -function ComponentProvider.getAllComponents( - self: ComponentProvider, - class: types.Component -): Set> - local result = {} - for _, components in self.instanceToComponents do - for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end - end - end - return result :: any -end - -function ComponentProvider.addComponent( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - error("not yet implemented") -end - -function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) - local constructed = self:getFromInstance(class, instance) - if constructed then - self.instanceToComponents[instance :: any][class] = nil - - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end - end -end - -export type ComponentProvider = typeof(ComponentProvider) -return providers.create(ComponentProvider) diff --git a/dist/wally/rbx-components/src/create.luau b/dist/wally/rbx-components/src/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/dist/wally/rbx-components/src/create.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("./component-classes") -local types = require("./types") - --- TODO: prvdmwrong/classes package? -local function create(self: Self): types.Component - local component: types.Component = self :: any - - if component.__index == nil then - component.__index = component - end - - -- TODO: abstract nameOf - - if component.new == nil then - function component.new(instance: any) - local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end - return self - end - end - - componentClasses[component] = true - return component -end - -return create diff --git a/dist/wally/rbx-components/src/extend-root/create-component-class-provider.luau b/dist/wally/rbx-components/src/extend-root/create-component-class-provider.luau deleted file mode 100644 index 9d5ae999..00000000 --- a/dist/wally/rbx-components/src/extend-root/create-component-class-provider.luau +++ /dev/null @@ -1,31 +0,0 @@ -local ComponentProvider = require("../component-provider") -local providers = require("../../providers") -local types = require("../types") - -local ComponentClassProvider = {} -ComponentClassProvider.priority = -math.huge -ComponentClassProvider.name = "@rbx-components.ComponentClassProvider" -ComponentClassProvider.dependencies = table.freeze({ - componentProvider = ComponentProvider, -}) - -ComponentClassProvider._components = {} :: { types.AnyComponent } - -function ComponentClassProvider.constructor( - self: ComponentClassProvider, - dependencies: typeof(ComponentClassProvider.dependencies) -) - for _, class in self._components do - dependencies.componentProvider:addComponentClass(class) - end -end - -export type ComponentClassProvider = typeof(ComponentClassProvider) - -local function createComponentClassProvider(components: { types.AnyComponent }) - local provider = table.clone(ComponentClassProvider) - provider._components = components - return providers.create(provider) -end - -return createComponentClassProvider diff --git a/dist/wally/rbx-components/src/extend-root/init.luau b/dist/wally/rbx-components/src/extend-root/init.luau deleted file mode 100644 index 6e9f0578..00000000 --- a/dist/wally/rbx-components/src/extend-root/init.luau +++ /dev/null @@ -1,30 +0,0 @@ -local ComponentProvider = require("./component-provider") -local createComponentClassProvider = require("@self/create-component-class-provider") -local logger = require("./logger") -local roots = require("../roots") -local types = require("./types") -local useComponent = require("@self/use-component") -local useComponents = require("@self/use-components") -local useModuleAsComponent = require("@self/use-module-as-component") -local useModulesAsComponents = require("@self/use-modules-as-components") - -local function extendRoot(root: types.RootPrivate): types.Root - if root._hasComponentExtensions then - return logger:fatalError({ template = logger.alreadyExtendedRoot }) - end - - root._hasComponentExtensions = true - root._classes = {} - - root:useProvider(ComponentProvider) - root:useProvider(createComponentClassProvider(root._classes)) - - root.useComponent = useComponent :: any - root.useComponents = useComponents :: any - root.useModuleAsComponent = useModuleAsComponent :: any - root.useModulesAsComponents = useModulesAsComponents :: any - - return root -end - -return extendRoot :: (root: roots.Root) -> types.Root diff --git a/dist/wally/rbx-components/src/extend-root/use-component.luau b/dist/wally/rbx-components/src/extend-root/use-component.luau deleted file mode 100644 index b0bd8d1f..00000000 --- a/dist/wally/rbx-components/src/extend-root/use-component.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function useComponent(root: types.RootPrivate, component: types.AnyComponent) - table.insert(root._classes, component) - return root -end - -return useComponent diff --git a/dist/wally/rbx-components/src/extend-root/use-components.luau b/dist/wally/rbx-components/src/extend-root/use-components.luau deleted file mode 100644 index 809a4006..00000000 --- a/dist/wally/rbx-components/src/extend-root/use-components.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local function useComponents(root: types.RootPrivate, components: { types.AnyComponent }) - for index = 1, #components do - table.insert(root._classes, components[index]) - end - return root -end - -return useComponents diff --git a/dist/wally/rbx-components/src/extend-root/use-module-as-component.luau b/dist/wally/rbx-components/src/extend-root/use-module-as-component.luau deleted file mode 100644 index 46724fe7..00000000 --- a/dist/wally/rbx-components/src/extend-root/use-module-as-component.luau +++ /dev/null @@ -1,12 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModuleAsComponent(root: types.RootPrivate, module: ModuleScript) - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - return root -end - -return useModuleAsComponent diff --git a/dist/wally/rbx-components/src/extend-root/use-modules-as-components.luau b/dist/wally/rbx-components/src/extend-root/use-modules-as-components.luau deleted file mode 100644 index bababafa..00000000 --- a/dist/wally/rbx-components/src/extend-root/use-modules-as-components.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModulesAsComponents( - root: types.RootPrivate, - modules: { Instance }, - predicate: ((ModuleScript) -> boolean)? -) - for index = 1, #modules do - local module = modules[index] - - if not module:IsA("ModuleScript") then - continue - end - - if predicate and not predicate(module) then - continue - end - - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - end - return root -end - -return useModulesAsComponents diff --git a/dist/wally/rbx-components/src/init.luau b/dist/wally/rbx-components/src/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/dist/wally/rbx-components/src/init.luau +++ /dev/null @@ -1,24 +0,0 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") - -export type Component = types.Component -export type Root = types.Root - -local components = { - create = create, - extendRoot = extendRoot, - _ = table.freeze({ - componentClasses = componentClasses, - }), -} - -local mt = {} - -function mt.__call(_, component: Self): types.Component - return create(component) -end - -table.freeze(mt) -return table.freeze(setmetatable(components, mt)) diff --git a/dist/wally/rbx-components/src/logger.luau b/dist/wally/rbx-components/src/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/dist/wally/rbx-components/src/logger.luau +++ /dev/null @@ -1,8 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { - alreadyExtendedRoot = "Root already has component extension.", - invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", - alreadyRegisteredComponent = "Component already registered.", - multipleSameTag = "Multiple components use the CollectionService tag '%s', which is likely a mistake. Supress this warning with `_G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG = true`.", -}) diff --git a/dist/wally/rbx-components/src/types.luau b/dist/wally/rbx-components/src/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/dist/wally/rbx-components/src/types.luau +++ /dev/null @@ -1,30 +0,0 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") - -export type Component = dependencies.Dependency, - tag: string?, - instanceCheck: (unknown) -> boolean, - blacklistInstances: { Instance }?, - whitelistInstances: { Instance }?, - constructor: (self: Component, instance: Instance) -> ()?, - added: (self: Component) -> ()?, - removed: (self: Component) -> ()?, - destroyed: (self: Component) -> ()?, -}, nil, Instance> - -export type Root = roots.Root & { - useModuleAsComponent: (root: Root, module: ModuleScript) -> Root, - useModulesAsComponents: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useComponent: (root: Root, component: Component) -> Root, - useComponents: (root: Root, components: { Component }) -> Root, -} - -export type RootPrivate = Root & { - _hasComponentExtensions: true?, - _classes: { Component }, -} - -export type AnyComponent = Component - -return nil diff --git a/dist/wally/rbx-lifecycles/LICENSE.md b/dist/wally/rbx-lifecycles/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/rbx-lifecycles/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/rbx-lifecycles/Wally.toml b/dist/wally/rbx-lifecycles/Wally.toml deleted file mode 100644 index 3412f852..00000000 --- a/dist/wally/rbx-lifecycles/Wally.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -authors = ["Fire "] -description = "Lifecycles implementations for Roblox" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/rbx-lifecycles" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -prvdmwrong = "prvdmwrong/prvdmwrong@0.2.0-rc.4" diff --git a/dist/wally/rbx-lifecycles/prvdmwrong.luau b/dist/wally/rbx-lifecycles/prvdmwrong.luau deleted file mode 100644 index 6f986dff..00000000 --- a/dist/wally/rbx-lifecycles/prvdmwrong.luau +++ /dev/null @@ -1,6 +0,0 @@ -local DEPENDENCY = require("./Packages/prvdmwrong") -export type Root = DEPENDENCY.Root -export type Lifecycle = DEPENDENCY.Lifecycle -export type StartedRoot = DEPENDENCY.StartedRoot -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/wally/rbx-lifecycles/src/index.d.ts b/dist/wally/rbx-lifecycles/src/index.d.ts deleted file mode 100644 index 3ad36447..00000000 --- a/dist/wally/rbx-lifecycles/src/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace RbxLifecycles { - export const RbxLifecycles: Provider<{ - preSimulation: Lifecycle<[dt: number]>; - postSimulation: Lifecycle<[dt: number]>; - preAnimation: Lifecycle<[dt: number]>; - preRender: Lifecycle<[dt: number]>; - playerAdded: Lifecycle<[player: Player]>; - playerRemoving: Lifecycle<[player: Player]>; - }>; - - export interface PreSimulation { - preSimulation(dt: number): void; - } - - export interface PostSimulation { - postSimulation(dt: number): void; - } - - export interface PreAnimation { - preAnimation(dt: number): void; - } - - export interface PreRender { - preRender(dt: number): void; - } - - export interface PlayerAdded { - playerAdded(player: Player): void; - } - - export interface PlayerRemoving { - playerRemoving(player: Player): void; - } -} - -export = RbxLifecycles; -export as namespace RbxLifecycles; diff --git a/dist/wally/rbx-lifecycles/src/init.luau b/dist/wally/rbx-lifecycles/src/init.luau deleted file mode 100644 index c1243680..00000000 --- a/dist/wally/rbx-lifecycles/src/init.luau +++ /dev/null @@ -1,67 +0,0 @@ -local Players = game:GetService("Players") -local RunService = game:GetService("RunService") - -local prvd = require("./prvdmwrong") - -local fireConcurrent = prvd.fireConcurrent - -local RbxLifecycles = {} -RbxLifecycles.name = "@prvdmwrong/rbx-lifecycles" -RbxLifecycles.priority = -math.huge - -RbxLifecycles.preSimulation = prvd.lifecycle("preSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.postSimulation = prvd.lifecycle("postSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preAnimation = prvd.lifecycle("preAnimation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preRender = prvd.lifecycle("preRender", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerAdded = prvd.lifecycle("playerAdded", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerRemoving = prvd.lifecycle("playerRemoving", fireConcurrent) :: prvd.Lifecycle - -local function wrapLifecycle(lifecycle: prvd.Lifecycle<...unknown>) - return function(...: unknown) - lifecycle:fire(...) - end -end - -function RbxLifecycles.constructor(self: RbxLifecycles) - self.connections = {} :: { RBXScriptConnection } - - self:_addConnections( - RunService.PreSimulation:Connect(wrapLifecycle(RbxLifecycles.preSimulation :: any)), - RunService.PostSimulation:Connect(wrapLifecycle(RbxLifecycles.postSimulation :: any)), - RunService.PreAnimation:Connect(wrapLifecycle(RbxLifecycles.preAnimation :: any)) - ) - - if RunService:IsClient() then - self:_addConnections(RunService.PreRender:Connect(wrapLifecycle(RbxLifecycles.preRender :: any))) - end - - self:_addConnections( - Players.PlayerAdded:Connect(wrapLifecycle(RbxLifecycles.playerAdded :: any)), - Players.PlayerRemoving:Connect(wrapLifecycle(RbxLifecycles.playerRemoving :: any)) - ) -end - -function RbxLifecycles.finish(self: RbxLifecycles) - for _, connection in self.connections do - if connection.Connected then - connection:Disconnect() - end - end - table.clear(self.connections) -end - -function RbxLifecycles._addConnections(self: RbxLifecycles, ...: RBXScriptConnection) - for index = 1, select("#", ...) do - table.insert(self.connections, select(index, ...) :: any) - end -end - --- Needed so typescript can require the provider as: --- --- ```ts --- import { RbxLifecycles } from "@rbxts/rbx-lifecycles" --- ``` -RbxLifecycles.RbxLifecycles = RbxLifecycles - -export type RbxLifecycles = typeof(RbxLifecycles) -return prvd(RbxLifecycles) diff --git a/dist/wally/roots/LICENSE.md b/dist/wally/roots/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/roots/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/roots/Wally.toml b/dist/wally/roots/Wally.toml deleted file mode 100644 index 0fcbbd8c..00000000 --- a/dist/wally/roots/Wally.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -authors = ["Fire "] -description = "Roots implementation for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/roots" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] -dependencies = "prvdmwrong/dependencies@0.2.0-rc.4" -lifecycles = "prvdmwrong/lifecycles@0.2.0-rc.4" -logger = "prvdmwrong/logger@0.2.0-rc.4" -providers = "prvdmwrong/providers@0.2.0-rc.4" -runtime = "prvdmwrong/runtime@0.2.0-rc.4" diff --git a/dist/wally/roots/dependencies.luau b/dist/wally/roots/dependencies.luau deleted file mode 100644 index c11c4469..00000000 --- a/dist/wally/roots/dependencies.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/dependencies") -export type Dependency = DEPENDENCY.Dependency -return DEPENDENCY diff --git a/dist/wally/roots/lifecycles.luau b/dist/wally/roots/lifecycles.luau deleted file mode 100644 index 53ce025e..00000000 --- a/dist/wally/roots/lifecycles.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/lifecycles") -export type Lifecycle = DEPENDENCY.Lifecycle -return DEPENDENCY diff --git a/dist/wally/roots/logger.luau b/dist/wally/roots/logger.luau deleted file mode 100644 index 830f960c..00000000 --- a/dist/wally/roots/logger.luau +++ /dev/null @@ -1,5 +0,0 @@ -local DEPENDENCY = require("./Packages/logger") -export type Logger = DEPENDENCY.Logger -export type Log = DEPENDENCY.Log -export type Error = DEPENDENCY.Error -return DEPENDENCY diff --git a/dist/wally/roots/providers.luau b/dist/wally/roots/providers.luau deleted file mode 100644 index dd417a75..00000000 --- a/dist/wally/roots/providers.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/providers") -export type Provider = DEPENDENCY.Provider -return DEPENDENCY diff --git a/dist/wally/roots/runtime.luau b/dist/wally/roots/runtime.luau deleted file mode 100644 index c841cb44..00000000 --- a/dist/wally/roots/runtime.luau +++ /dev/null @@ -1,3 +0,0 @@ -local DEPENDENCY = require("./Packages/runtime") -export type RuntimeName = DEPENDENCY.RuntimeName -return DEPENDENCY diff --git a/dist/wally/roots/src/create.luau b/dist/wally/roots/src/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/dist/wally/roots/src/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/dist/wally/roots/src/hooks/lifecycle-used.luau b/dist/wally/roots/src/hooks/lifecycle-used.luau deleted file mode 100644 index bd29276a..00000000 --- a/dist/wally/roots/src/hooks/lifecycle-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycles = require("../../lifecycles") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: lifecycles.Lifecycle) -> () } = {} - -local function onLifecycleUsed(listener: (root: types.Root, lifecycle: lifecycles.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUsed = onLifecycleUsed, -}) diff --git a/dist/wally/roots/src/hooks/provider-used.luau b/dist/wally/roots/src/hooks/provider-used.luau deleted file mode 100644 index dac2573c..00000000 --- a/dist/wally/roots/src/hooks/provider-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providers = require("../../providers") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: providers.Provider) -> () } = {} - -local function onProviderUsed(listener: (root: types.Root, provider: providers.Provider) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onProviderUsed = onProviderUsed, -}) diff --git a/dist/wally/roots/src/hooks/root-constructing.luau b/dist/wally/roots/src/hooks/root-constructing.luau deleted file mode 100644 index 5fb8b819..00000000 --- a/dist/wally/roots/src/hooks/root-constructing.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootConstructing(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootConstructing = onRootConstructing, -}) diff --git a/dist/wally/roots/src/hooks/root-destroyed.luau b/dist/wally/roots/src/hooks/root-destroyed.luau deleted file mode 100644 index 10b79b54..00000000 --- a/dist/wally/roots/src/hooks/root-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootDestroyed(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootDestroyed = onRootDestroyed, -}) diff --git a/dist/wally/roots/src/hooks/root-finished.luau b/dist/wally/roots/src/hooks/root-finished.luau deleted file mode 100644 index d3519cea..00000000 --- a/dist/wally/roots/src/hooks/root-finished.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootFinished(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootFinished = onRootFinished, -}) diff --git a/dist/wally/roots/src/hooks/root-started.luau b/dist/wally/roots/src/hooks/root-started.luau deleted file mode 100644 index 2ae6f90c..00000000 --- a/dist/wally/roots/src/hooks/root-started.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootStarted(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootStarted = onRootStarted, -}) diff --git a/dist/wally/roots/src/hooks/root-used.luau b/dist/wally/roots/src/hooks/root-used.luau deleted file mode 100644 index 71f172cc..00000000 --- a/dist/wally/roots/src/hooks/root-used.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self, subRoot: types.Root) -> () } = {} - -local function onRootUsed(listener: (root: types.Root, subRoot: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootUsed = onRootUsed, -}) diff --git a/dist/wally/roots/src/index.d.ts b/dist/wally/roots/src/index.d.ts deleted file mode 100644 index d8e100c5..00000000 --- a/dist/wally/roots/src/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/dist/wally/roots/src/init.luau b/dist/wally/roots/src/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/dist/wally/roots/src/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/dist/wally/roots/src/logger.luau b/dist/wally/roots/src/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/dist/wally/roots/src/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { - useAfterDestroy = "Cannot use Root after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/dist/wally/roots/src/methods/destroy.luau b/dist/wally/roots/src/methods/destroy.luau deleted file mode 100644 index 0c62a935..00000000 --- a/dist/wally/roots/src/methods/destroy.luau +++ /dev/null @@ -1,16 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function destroy(root: types.Self) - if root._destroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - root._destroyed = true - table.clear(root._rootLifecycles) - table.clear(root._rootProviders) - table.clear(root._subRoots) - root._start:clear() - root._finish:clear() -end - -return destroy diff --git a/dist/wally/roots/src/methods/start.luau b/dist/wally/roots/src/methods/start.luau deleted file mode 100644 index 3f24dac5..00000000 --- a/dist/wally/roots/src/methods/start.luau +++ /dev/null @@ -1,102 +0,0 @@ -local dependencies = require("../../dependencies") -local lifecycles = require("../../lifecycles") -local logger = require("../logger") -local providers = require("../../providers") -local rootFinished = require("../hooks/root-finished").callbacks -local rootStarted = require("../hooks/root-started").callbacks -local types = require("../types") - -local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: providers.Provider) - local lifecycleMethod = (provider :: any)[lifecycle.method] - if typeof(lifecycleMethod) == "function" then - -- local isProfiling = _G.PRVDMWRONG_PROFILE_LIFECYCLES - - -- if isProfiling then - -- lifecycle:register(function(...) - -- debug.profilebegin(memoryCategory) - -- debug.setmemorycategory(memoryCategory) - -- lifecycleMethod(provider, ...) - -- debug.resetmemorycategory() - -- debug.profileend() - -- end) - -- else - lifecycle:register(function(...) - lifecycleMethod(provider, ...) - end) - -- end - end -end - -local function nameOf(provider: providers.Provider, extension: string?): string - return if extension then `{tostring(provider)}.{extension}` else tostring(provider) -end - -local function start(root: types.Self): types.StartedRoot - local processed = dependencies.processDependencies(root._rootProviders) - local sortedProviders = processed.sortedDependencies :: { providers.Provider } - local processedLifecycles = processed.lifecycles - table.move(root._rootLifecycles, 1, #root._rootLifecycles, #processedLifecycles + 1, processedLifecycles) - - dependencies.sortByPriority(sortedProviders) - - local constructedProviders = {} - for _, provider in sortedProviders do - local providerDependencies = (provider :: any).dependencies - if typeof(providerDependencies) == "table" then - providerDependencies = table.clone(providerDependencies) - for key, value in providerDependencies do - providerDependencies[key] = constructedProviders[value] - end - end - - local constructed = provider.new(providerDependencies) - constructedProviders[provider] = constructed - bindLifecycle(root._start, constructed) - bindLifecycle(root._finish, constructed) - - for _, lifecycle in processedLifecycles do - bindLifecycle(lifecycle, constructed) - end - end - - local subRoots: { types.StartedRoot } = {} - for root in root._subRoots do - table.insert(subRoots, root:start()) - end - - root._start:fire() - - local startedRoot = {} :: types.StartedRoot - startedRoot.type = "StartedRoot" - - local didFinish = false - - function startedRoot:finish() - if didFinish then - return logger:fatalError({ template = logger.alreadyFinished }) - end - - didFinish = true - root._finish:fire() - - -- NOTE(znotfireman): Assume the user cleans up their own lifecycles - root._start:clear() - root._finish:clear() - - for _, subRoot in subRoots do - subRoot:finish() - end - - for _, hook in rootFinished do - hook(root) - end - end - - for _, hook in rootStarted do - hook(root) - end - - return startedRoot -end - -return start diff --git a/dist/wally/roots/src/methods/use-lifecycle.luau b/dist/wally/roots/src/methods/use-lifecycle.luau deleted file mode 100644 index 862c2d07..00000000 --- a/dist/wally/roots/src/methods/use-lifecycle.luau +++ /dev/null @@ -1,14 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycle(root: types.Self, lifecycle: lifecycles.Lifecycle) - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - return root -end - -return useLifecycle diff --git a/dist/wally/roots/src/methods/use-lifecycles.luau b/dist/wally/roots/src/methods/use-lifecycles.luau deleted file mode 100644 index 3f12341f..00000000 --- a/dist/wally/roots/src/methods/use-lifecycles.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycles(root: types.Self, lifecycles: { lifecycles.Lifecycle }) - for _, lifecycle in lifecycles do - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - end - return root -end - -return useLifecycles diff --git a/dist/wally/roots/src/methods/use-module.luau b/dist/wally/roots/src/methods/use-module.luau deleted file mode 100644 index a96b3d17..00000000 --- a/dist/wally/roots/src/methods/use-module.luau +++ /dev/null @@ -1,23 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModule(root: types.Self, module: ModuleScript) - local moduleExport = (require)(module) - - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - - return root -end - -return useModule diff --git a/dist/wally/roots/src/methods/use-modules.luau b/dist/wally/roots/src/methods/use-modules.luau deleted file mode 100644 index 8354a9d0..00000000 --- a/dist/wally/roots/src/methods/use-modules.luau +++ /dev/null @@ -1,28 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModules(root: types.Self, modules: { Instance }, predicate: ((module: ModuleScript) -> boolean)?) - for _, module in modules do - if not module:IsA("ModuleScript") or predicate and not predicate(module) then - continue - end - - local moduleExport = (require)(module) - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - end - - return root -end - -return useModules diff --git a/dist/wally/roots/src/methods/use-provider.luau b/dist/wally/roots/src/methods/use-provider.luau deleted file mode 100644 index 277d8049..00000000 --- a/dist/wally/roots/src/methods/use-provider.luau +++ /dev/null @@ -1,14 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProvider(root: types.Self, provider: providers.Provider) - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - return root -end - -return useProvider diff --git a/dist/wally/roots/src/methods/use-providers.luau b/dist/wally/roots/src/methods/use-providers.luau deleted file mode 100644 index 1489c3a3..00000000 --- a/dist/wally/roots/src/methods/use-providers.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProviders(root: types.Self, providers: { providers.Provider }) - for _, provider in providers do - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - end - return root -end - -return useProviders diff --git a/dist/wally/roots/src/methods/use-root.luau b/dist/wally/roots/src/methods/use-root.luau deleted file mode 100644 index efc4ad1e..00000000 --- a/dist/wally/roots/src/methods/use-root.luau +++ /dev/null @@ -1,13 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoot(root: types.Self, subRoot: types.Root) - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - return root -end - -return useRoot diff --git a/dist/wally/roots/src/methods/use-roots.luau b/dist/wally/roots/src/methods/use-roots.luau deleted file mode 100644 index 7b5b9dda..00000000 --- a/dist/wally/roots/src/methods/use-roots.luau +++ /dev/null @@ -1,15 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoots(root: types.Self, subRoots: { types.Root }) - for _, subRoot in subRoots do - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - end - return root -end - -return useRoots diff --git a/dist/wally/roots/src/methods/will-finish.luau b/dist/wally/roots/src/methods/will-finish.luau deleted file mode 100644 index 893088f4..00000000 --- a/dist/wally/roots/src/methods/will-finish.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willFinish(root: types.Self, callback: () -> ()) - root._finish:register(callback) - return root -end - -return willFinish diff --git a/dist/wally/roots/src/methods/will-start.luau b/dist/wally/roots/src/methods/will-start.luau deleted file mode 100644 index 7c3d88c3..00000000 --- a/dist/wally/roots/src/methods/will-start.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willStart(root: types.Self, callback: () -> ()) - root._start:register(callback) - return root -end - -return willStart diff --git a/dist/wally/roots/src/types.luau b/dist/wally/roots/src/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/dist/wally/roots/src/types.luau +++ /dev/null @@ -1,40 +0,0 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") - -type Set = { [T]: true } - -export type Root = { - type: "Root", - - start: (root: Root) -> StartedRoot, - - useModule: (root: Root, module: ModuleScript) -> Root, - useModules: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useRoot: (root: Root, root: Root) -> Root, - useRoots: (root: Root, roots: { Root }) -> Root, - useProvider: (root: Root, provider: providers.Provider) -> Root, - useProviders: (root: Root, providers: { providers.Provider }) -> Root, - useLifecycle: (root: Root, lifecycle: lifecycles.Lifecycle) -> Root, - useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, - destroy: (root: Root) -> (), - - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, -} - -export type StartedRoot = { - type: "StartedRoot", - - finish: (root: StartedRoot) -> (), -} - -export type Self = Root & { - _destroyed: boolean, - _rootProviders: Set>, - _rootLifecycles: { lifecycles.Lifecycle }, - _subRoots: Set, - _start: lifecycles.Lifecycle<()>, - _finish: lifecycles.Lifecycle<()>, -} - -return nil diff --git a/dist/wally/runtime/LICENSE.md b/dist/wally/runtime/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/runtime/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/runtime/Wally.toml b/dist/wally/runtime/Wally.toml deleted file mode 100644 index 66b37d73..00000000 --- a/dist/wally/runtime/Wally.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -authors = ["Fire "] -description = "Runtime agnostic libraries for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/runtime" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] diff --git a/dist/wally/runtime/src/batteries/threadpool.luau b/dist/wally/runtime/src/batteries/threadpool.luau deleted file mode 100644 index 6caf08b4..00000000 --- a/dist/wally/runtime/src/batteries/threadpool.luau +++ /dev/null @@ -1,38 +0,0 @@ -local task = require("../libs/task") - -local freeThreads: { thread } = {} - -local function run(f: (T...) -> (), thread: thread, ...) - f(...) - table.insert(freeThreads, thread) -end - -local function yielder() - while true do - run(coroutine.yield()) - end -end - -local function spawn(f: (T...) -> (), ...: T...) - local thread - if #freeThreads > 0 then - thread = freeThreads[#freeThreads] - freeThreads[#freeThreads] = nil - else - thread = coroutine.create(yielder) - coroutine.resume(thread) - end - - task.spawn(thread, f, thread, ...) -end - -local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args...) - for _, callback in callbacks do - spawn(callback, ...) - end -end - -return table.freeze({ - spawn = spawn, - spawnCallbacks = spawnCallbacks, -}) diff --git a/dist/wally/runtime/src/implementations/init.luau b/dist/wally/runtime/src/implementations/init.luau deleted file mode 100644 index 28dbe015..00000000 --- a/dist/wally/runtime/src/implementations/init.luau +++ /dev/null @@ -1,56 +0,0 @@ -local types = require("@self/../types") - -type Implementation = { new: (() -> T)?, implementation: T? } - -export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune" - -local supportedRuntimes = table.freeze({ - roblox = require("@self/roblox"), - luau = require("@self/luau"), - lune = require("@self/lune"), - lute = require("@self/lute"), - seal = require("@self/seal"), - zune = require("@self/zune"), -}) - -local currentRuntime: types.Runtime = nil -do - for _, runtime in supportedRuntimes :: { [string]: types.Runtime } do - local isRuntime = runtime.is() - if isRuntime then - local currentRuntimePriority = currentRuntime and currentRuntime.priority or 0 - local runtimePriority = runtime.priority or 0 - if currentRuntimePriority <= runtimePriority then - currentRuntime = runtime - end - end - end - assert(currentRuntime, "No supported runtime") -end - -local currentRuntimeName: RuntimeName = currentRuntime.name :: any - -local function notImplemented(functionName: string) - return function() - error(`'{functionName}' is not implemented by runtime '{currentRuntimeName}'`, 2) - end -end - -local function implementFunction(label: string, implementations: { [types.Runtime]: Implementation? }): T - local implementation = implementations[currentRuntime] - if implementation then - if implementation.new then - return implementation.new() - elseif implementation.implementation then - return implementation.implementation - end - end - return notImplemented(label) :: any -end - -return table.freeze({ - supportedRuntimes = supportedRuntimes, - currentRuntime = currentRuntime, - currentRuntimeName = currentRuntimeName, - implementFunction = implementFunction, -}) diff --git a/dist/wally/runtime/src/implementations/init.spec.luau b/dist/wally/runtime/src/implementations/init.spec.luau deleted file mode 100644 index 3ce91cbb..00000000 --- a/dist/wally/runtime/src/implementations/init.spec.luau +++ /dev/null @@ -1,81 +0,0 @@ -local implementations = require("@self/../implementations") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("currentRuntime", function() - test("detects lune runtime", function() - expect(implementations.currentRuntimeName).is("lune") - expect(implementations.currentRuntime).is(implementations.supportedRuntimes.lune) - end) - end) - - describe("implementFunction", function() - test("implements for lune runtime", function() - local lune = function() end - local luau = function() end - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - implementation = lune, - }, - [implementations.supportedRuntimes.luau] = { - implementation = luau, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - end) - - test("constructs for lune runtime", function() - local lune = function() end - local luau = function() end - - local constructedLune = false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - new = function() - constructedLune = true - return lune - end, - }, - [implementations.supportedRuntimes.luau] = { - new = function() - return luau - end, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - expect(constructedLune).is_true() - end) - - test("defaults to not implemented function", function() - local constructSuccess, runSuccess = false, false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.roblox] = { - new = function() - constructSuccess = true - return function() - runSuccess = true - end - end, - }, - }) - - expect(constructSuccess).is(false) - expect(implementation).is_a("function") - expect(implementation).fails_with("'implementation' is not implemented by runtime 'lune'") - expect(runSuccess).is(false) - end) - end) -end diff --git a/dist/wally/runtime/src/implementations/luau.luau b/dist/wally/runtime/src/implementations/luau.luau deleted file mode 100644 index c67e52f4..00000000 --- a/dist/wally/runtime/src/implementations/luau.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "luau", - priority = -1, - is = function() - return true - end, -}) diff --git a/dist/wally/runtime/src/implementations/lune.luau b/dist/wally/runtime/src/implementations/lune.luau deleted file mode 100644 index f49834eb..00000000 --- a/dist/wally/runtime/src/implementations/lune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local LUNE_VERSION_FORMAT = "(Lune) (%d+%.%d+%.%d+.*)+(%d+)" - -return types.Runtime({ - name = "lune", - is = function() - return string.match(_VERSION, LUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/wally/runtime/src/implementations/lute.luau b/dist/wally/runtime/src/implementations/lute.luau deleted file mode 100644 index 7b6abc58..00000000 --- a/dist/wally/runtime/src/implementations/lute.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "lute", - is = function() - return false - end, -}) diff --git a/dist/wally/runtime/src/implementations/roblox.luau b/dist/wally/runtime/src/implementations/roblox.luau deleted file mode 100644 index 91a780e2..00000000 --- a/dist/wally/runtime/src/implementations/roblox.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "roblox", - is = function() - -- wtf - return not not (_VERSION == "Luau" and game and workspace) - end, -}) diff --git a/dist/wally/runtime/src/implementations/seal.luau b/dist/wally/runtime/src/implementations/seal.luau deleted file mode 100644 index 0a72684c..00000000 --- a/dist/wally/runtime/src/implementations/seal.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "seal", - is = function() - return false - end, -}) diff --git a/dist/wally/runtime/src/implementations/zune.luau b/dist/wally/runtime/src/implementations/zune.luau deleted file mode 100644 index 48243e05..00000000 --- a/dist/wally/runtime/src/implementations/zune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local ZUNE_VERSION_FORMAT = "(Zune) (%d+%.%d+%.%d+.*)+(%d+%.%d+)" - -return types.Runtime({ - name = "zune", - is = function() - return string.match(_VERSION, ZUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/dist/wally/runtime/src/index.d.ts b/dist/wally/runtime/src/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/dist/wally/runtime/src/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/dist/wally/runtime/src/init.luau b/dist/wally/runtime/src/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/dist/wally/runtime/src/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/dist/wally/runtime/src/libs/task.luau b/dist/wally/runtime/src/libs/task.luau deleted file mode 100644 index 28c1ac9e..00000000 --- a/dist/wally/runtime/src/libs/task.luau +++ /dev/null @@ -1,157 +0,0 @@ -local implementations = require("../implementations") - -export type TaskLib = { - cancel: (thread) -> (), - defer: (functionOrThread: thread | (T...) -> (), T...) -> thread, - delay: (duration: number, functionOrThread: thread | (T...) -> (), T...) -> thread, - spawn: (functionOrThread: thread | (T...) -> (), T...) -> thread, - wait: (duration: number?) -> number, -} - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function defaultSpawn(functionOrThread: thread | (T...) -> (), ...: T...): thread - if type(functionOrThread) == "thread" then - coroutine.resume(functionOrThread, ...) - return functionOrThread - else - local thread = coroutine.create(functionOrThread) - coroutine.resume(thread, ...) - return thread - end -end - -local function defaultWait(seconds: number?) - local startTime = os.clock() - local endTime = startTime + (seconds or 1) - local clockTime: number - repeat - clockTime = os.clock() - until clockTime >= endTime - return clockTime - startTime -end - -local task: TaskLib = table.freeze({ - cancel = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.cancel - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").cancel - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").cancel - end, - }, - [supportedRuntimes.luau] = { - implementation = function(thread) - if not coroutine.close(thread) then - error(debug.traceback(thread, "Could not cancel thread")) - end - end, - }, - }), - defer = implementFunction("task.defer", { - [supportedRuntimes.roblox] = { - new = function() - return task.defer :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").defer - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").defer - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - delay = implementFunction("task.delay", { - [supportedRuntimes.roblox] = { - new = function() - return task.delay :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").delay - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").delay - end, - }, - [supportedRuntimes.luau] = { - implementation = function(duration: number, functionOrThread: thread | (T...) -> (), ...: T...): thread - return defaultSpawn( - if typeof(functionOrThread) == "function" - then function(duration, functionOrThread, ...) - defaultWait(duration) - functionOrThread(...) - end - else function(duration, functionOrThread, ...) - defaultWait(duration) - coroutine.resume(...) - end, - duration, - functionOrThread, - ... - ) - end, - }, - }), - spawn = implementFunction("task.spawn", { - [supportedRuntimes.roblox] = { - new = function() - return task.spawn :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").spawn - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").spawn - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - wait = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.wait - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").wait - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").wait - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultWait, - }, - }), -}) - -return task diff --git a/dist/wally/runtime/src/libs/task.spec.luau b/dist/wally/runtime/src/libs/task.spec.luau deleted file mode 100644 index 0918e87f..00000000 --- a/dist/wally/runtime/src/libs/task.spec.luau +++ /dev/null @@ -1,62 +0,0 @@ -local luneTask = require("@lune/task") -local task = require("./task") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - --- FIXME: can't async stuff lol -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("task", function() - test("spawn", function() - expect(task.spawn).is(luneTask.spawn) - local spawned = false - - task.spawn(function() - spawned = true - end) - - expect(spawned).is_true() - end) - - test("defer", function() - expect(task.defer).is(luneTask.defer) - - -- local spawned = false - - -- task.defer(function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - end) - - test("delay", function() - expect(task.delay).is(luneTask.delay) - -- local spawned = false - - -- task.delay(0.25, function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - - -- local startTime = os.clock() - -- repeat - -- until os.clock() - startTime > 0.5 - - -- print(spawned) - - -- expect(spawned).is_true() - end) - - test("wait", function() - expect(task.wait).is(luneTask.wait) - end) - - test("cancel", function() - expect(task.cancel).is(luneTask.cancel) - end) - end) -end diff --git a/dist/wally/runtime/src/libs/warn.luau b/dist/wally/runtime/src/libs/warn.luau deleted file mode 100644 index 6a4837ac..00000000 --- a/dist/wally/runtime/src/libs/warn.luau +++ /dev/null @@ -1,27 +0,0 @@ -local implementations = require("../implementations") - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function tostringTuple(...: any) - local stringified = {} - for index = 1, select("#", ...) do - table.insert(stringified, tostring(select(index, ...))) - end - return table.concat(stringified, " ") -end - -local warn: (T...) -> () = implementFunction("warn", { - [supportedRuntimes.roblox] = { - new = function() - return warn - end, - }, - [supportedRuntimes.luau] = { - implementation = function(...: T...) - print(`\27[0;33m{tostringTuple(...)}\27[0m`) - end, - }, -}) - -return warn diff --git a/dist/wally/runtime/src/types.luau b/dist/wally/runtime/src/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/dist/wally/runtime/src/types.luau +++ /dev/null @@ -1,13 +0,0 @@ -export type Runtime = { - name: string, - priority: number?, - is: () -> boolean, -} - -local function Runtime(x: Runtime) - return table.freeze(x) -end - -return table.freeze({ - Runtime = Runtime, -}) diff --git a/dist/wally/typecheckers/LICENSE.md b/dist/wally/typecheckers/LICENSE.md deleted file mode 100644 index f6610311..00000000 --- a/dist/wally/typecheckers/LICENSE.md +++ /dev/null @@ -1,355 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -### 1. Definitions - -**1.1. “Contributor”** - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -**1.2. “Contributor Version”** - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -**1.3. “Contribution”** - means Covered Software of a particular Contributor. - -**1.4. “Covered Software”** - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -**1.5. “Incompatible With Secondary Licenses”** - means - -* **(a)** that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or -* **(b)** that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -**1.6. “Executable Form”** - means any form of the work other than Source Code Form. - -**1.7. “Larger Work”** - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -**1.8. “License”** - means this document. - -**1.9. “Licensable”** - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -**1.10. “Modifications”** - means any of the following: - -* **(a)** any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or -* **(b)** any new file in Source Code Form that contains any Covered - Software. - -**1.11. “Patent Claims” of a Contributor** - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -**1.12. “Secondary License”** - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -**1.13. “Source Code Form”** - means the form of the work preferred for making modifications. - -**1.14. “You” (or “Your”)** - means an individual or a legal entity exercising rights under this - License. For legal entities, “You” includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, “control” means **(a)** the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or **(b)** ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - - -### 2. License Grants and Conditions - -#### 2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -* **(a)** under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and -* **(b)** under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -#### 2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -#### 2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -* **(a)** for any code that a Contributor has removed from Covered Software; - or -* **(b)** for infringements caused by: **(i)** Your and any other third party's - modifications of Covered Software, or **(ii)** the combination of its - Contributions with other software (except as part of its Contributor - Version); or -* **(c)** under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -#### 2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -#### 2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -#### 2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -#### 2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - - -### 3. Responsibilities - -#### 3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -#### 3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -* **(a)** such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -* **(b)** You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -#### 3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -#### 3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -#### 3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - - -### 4. Inability to Comply Due to Statute or Regulation - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: **(a)** comply with -the terms of this License to the maximum extent possible; and **(b)** -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - - -### 5. Termination - -**5.1.** The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated **(a)** provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and **(b)** on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -**5.2.** If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - - -### 6. Disclaimer of Warranty - -> Covered Software is provided under this License on an “as is” -> basis, without warranty of any kind, either expressed, implied, or -> statutory, including, without limitation, warranties that the -> Covered Software is free of defects, merchantable, fit for a -> particular purpose or non-infringing. The entire risk as to the -> quality and performance of the Covered Software is with You. -> Should any Covered Software prove defective in any respect, You -> (not any Contributor) assume the cost of any necessary servicing, -> repair, or correction. This disclaimer of warranty constitutes an -> essential part of this License. No use of any Covered Software is -> authorized under this License except under this disclaimer. - -### 7. Limitation of Liability - -> Under no circumstances and under no legal theory, whether tort -> (including negligence), contract, or otherwise, shall any -> Contributor, or anyone who distributes Covered Software as -> permitted above, be liable to You for any direct, indirect, -> special, incidental, or consequential damages of any character -> including, without limitation, damages for lost profits, loss of -> goodwill, work stoppage, computer failure or malfunction, or any -> and all other commercial damages or losses, even if such party -> shall have been informed of the possibility of such damages. This -> limitation of liability shall not apply to liability for death or -> personal injury resulting from such party's negligence to the -> extent applicable law prohibits such limitation. Some -> jurisdictions do not allow the exclusion or limitation of -> incidental or consequential damages, so this exclusion and -> limitation may not apply to You. - - -### 8. Litigation - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - - -### 9. Miscellaneous - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - - -### 10. Versions of the License - -#### 10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -#### 10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -#### 10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -## Exhibit A - Source Code Form License Notice - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -## Exhibit B - “Incompatible With Secondary Licenses” Notice - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. \ No newline at end of file diff --git a/dist/wally/typecheckers/Wally.toml b/dist/wally/typecheckers/Wally.toml deleted file mode 100644 index 4532c3e5..00000000 --- a/dist/wally/typecheckers/Wally.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -authors = ["Fire "] -description = "Typechecking primitives and compatibility for Prvd 'M Wrong" -homepage = "https://prvdmwrong.luau.page/latest/" -license = "MPL-2.0" -name = "prvdmwrong/typecheckers" -private = false -realm = "shared" -registry = "https://github.com/upliftgames/wally-index" -repository = "https://github.com/prvdmwrong/prvdmwrong" -version = "0.2.0-rc.4" - -[package.dependencies] diff --git a/dist/wally/typecheckers/src/init.luau b/dist/wally/typecheckers/src/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/gh-assets/wordmark-dark.svg b/gh-assets/wordmark-dark.svg deleted file mode 100644 index d5454624..00000000 --- a/gh-assets/wordmark-dark.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/gh-assets/wordmark-light.svg b/gh-assets/wordmark-light.svg deleted file mode 100644 index b5d7c845..00000000 --- a/gh-assets/wordmark-light.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/dist/pesde/lune/lifecycles/src/create.luau b/lifecycles/create.luau similarity index 60% rename from dist/pesde/lune/lifecycles/src/create.luau rename to lifecycles/create.luau index 6cdd2891..b0319742 100644 --- a/dist/pesde/lune/lifecycles/src/create.luau +++ b/lifecycles/create.luau @@ -1,13 +1,13 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") +local await = require "./methods/await" +local clear = require "./methods/unregister-all" +local destroy = require "./methods/destroy" +local lifecycleConstructed = require "./hooks/lifecycle-constructed" +local methodToLifecycles = require "./method-to-lifecycles" +local onRegistered = require "./methods/on-registered" +local onUnregistered = require "./methods/on-unregistered" +local register = require "./methods/register" +local types = require "./types" +local unregister = require "./methods/unregister" local function create( method: string, diff --git a/dist/pesde/luau/lifecycles/src/handlers/fire-concurrent.luau b/lifecycles/handlers/fire-concurrent.luau similarity index 73% rename from dist/pesde/luau/lifecycles/src/handlers/fire-concurrent.luau rename to lifecycles/handlers/fire-concurrent.luau index f279b888..4689b5c2 100644 --- a/dist/pesde/luau/lifecycles/src/handlers/fire-concurrent.luau +++ b/lifecycles/handlers/fire-concurrent.luau @@ -1,5 +1,5 @@ -local runtime = require("../../runtime") -local types = require("../types") +local runtime = require "../../runtime" +local types = require "../types" local function fireConcurrent(lifecycle: types.Lifecycle, ...: Args...) for _, callback in lifecycle.callbacks do diff --git a/dist/pesde/roblox/lifecycles/src/handlers/fire-sequential.luau b/lifecycles/handlers/fire-sequential.luau similarity index 84% rename from dist/pesde/roblox/lifecycles/src/handlers/fire-sequential.luau rename to lifecycles/handlers/fire-sequential.luau index 80911ad9..f2bcb593 100644 --- a/dist/pesde/roblox/lifecycles/src/handlers/fire-sequential.luau +++ b/lifecycles/handlers/fire-sequential.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local function fireSequential(lifecycle: types.Lifecycle, ...: Args...) for _, callback in lifecycle.callbacks do diff --git a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-constructed.luau b/lifecycles/hooks/lifecycle-constructed.luau similarity index 65% rename from dist/pesde/luau/lifecycles/src/hooks/lifecycle-constructed.luau rename to lifecycles/hooks/lifecycle-constructed.luau index 8ea4d81b..c534ae16 100644 --- a/dist/pesde/luau/lifecycles/src/hooks/lifecycle-constructed.luau +++ b/lifecycles/hooks/lifecycle-constructed.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} local function onLifecycleConstructed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onLifecycleConstructed = onLifecycleConstructed, -}) +} diff --git a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-destroyed.luau b/lifecycles/hooks/lifecycle-destroyed.luau similarity index 65% rename from dist/pesde/roblox/lifecycles/src/hooks/lifecycle-destroyed.luau rename to lifecycles/hooks/lifecycle-destroyed.luau index 47abcfab..81fbab8b 100644 --- a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-destroyed.luau +++ b/lifecycles/hooks/lifecycle-destroyed.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} local function onLifecycleDestroyed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onLifecycleDestroyed = onLifecycleDestroyed, -}) +} diff --git a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-registered.luau b/lifecycles/hooks/lifecycle-registered.luau similarity index 70% rename from dist/pesde/roblox/lifecycles/src/hooks/lifecycle-registered.luau rename to lifecycles/hooks/lifecycle-registered.luau index fab588a3..8ee76453 100644 --- a/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-registered.luau +++ b/lifecycles/hooks/lifecycle-registered.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} @@ -9,12 +9,10 @@ local function onLifecycleRegistered( ) -> () ): () -> () table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end + return function() table.remove(callbacks, table.find(callbacks, listener :: any)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onLifecycleRegistered = onLifecycleRegistered, -}) +} diff --git a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-unregistered.luau b/lifecycles/hooks/lifecycle-unregistered.luau similarity index 71% rename from dist/pesde/lune/lifecycles/src/hooks/lifecycle-unregistered.luau rename to lifecycles/hooks/lifecycle-unregistered.luau index 0ec81756..e66f5afa 100644 --- a/dist/pesde/lune/lifecycles/src/hooks/lifecycle-unregistered.luau +++ b/lifecycles/hooks/lifecycle-unregistered.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} @@ -9,12 +9,10 @@ local function onLifecycleUnregistered( ) -> () ): () -> () table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end + return function() table.remove(callbacks, table.find(callbacks, listener :: any)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onLifecycleUnregistered = onLifecycleUnregistered, -}) +} diff --git a/lifecycles/init.luau b/lifecycles/init.luau new file mode 100644 index 00000000..bc8a5abe --- /dev/null +++ b/lifecycles/init.luau @@ -0,0 +1,28 @@ +local create = require "@self/create" +local fireConcurrent = require "@self/handlers/fire-concurrent" +local fireSequential = require "@self/handlers/fire-sequential" +local lifecycleConstructed = require "@self/hooks/lifecycle-constructed" +local lifecycleDestroyed = require "@self/hooks/lifecycle-destroyed" +local lifecycleRegistered = require "@self/hooks/lifecycle-registered" +local lifecycleUnregistered = require "@self/hooks/lifecycle-unregistered" +local methodToLifecycles = require "@self/method-to-lifecycles" +local types = require "@self/types" + +export type Lifecycle = types.Lifecycle + +return table.freeze { + create = create, + handlers = table.freeze { + fireConcurrent = fireConcurrent, + fireSequential = fireSequential, + }, + hooks = table.freeze { + onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, + onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, + onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, + onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, + }, + _ = table.freeze { + methodToLifecycles = methodToLifecycles, + }, +} diff --git a/dist/npm/lifecycles/src/logger.luau b/lifecycles/logger.luau similarity index 76% rename from dist/npm/lifecycles/src/logger.luau rename to lifecycles/logger.luau index 3ae7c27e..3c9582ce 100644 --- a/dist/npm/lifecycles/src/logger.luau +++ b/lifecycles/logger.luau @@ -1,6 +1,6 @@ -local logger = require("../logger") +local logger = require "../logger" -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { +return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl "lifecycles", { useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", }) diff --git a/dist/pesde/luau/lifecycles/src/method-to-lifecycles.luau b/lifecycles/method-to-lifecycles.luau similarity index 73% rename from dist/pesde/luau/lifecycles/src/method-to-lifecycles.luau rename to lifecycles/method-to-lifecycles.luau index 386a8756..bcdc62b2 100644 --- a/dist/pesde/luau/lifecycles/src/method-to-lifecycles.luau +++ b/lifecycles/method-to-lifecycles.luau @@ -1,4 +1,4 @@ -local types = require("./types") +local types = require "./types" local methodToLifecycles: { [string]: { types.Lifecycle } } = {} diff --git a/dist/pesde/luau/lifecycles/src/methods/await.luau b/lifecycles/methods/await.luau similarity index 64% rename from dist/pesde/luau/lifecycles/src/methods/await.luau rename to lifecycles/methods/await.luau index ed8299d6..c521c0f9 100644 --- a/dist/pesde/luau/lifecycles/src/methods/await.luau +++ b/lifecycles/methods/await.luau @@ -1,10 +1,8 @@ -local logger = require("../logger") -local types = require("../types") +local logger = require "../logger" +local types = require "../types" local function await(lifecycle: types.Self): Args... - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end local currentThread = coroutine.running() local function callback(...: Args...) lifecycle:unregister(callback) diff --git a/dist/pesde/luau/lifecycles/src/methods/destroy.luau b/lifecycles/methods/destroy.luau similarity index 53% rename from dist/pesde/luau/lifecycles/src/methods/destroy.luau rename to lifecycles/methods/destroy.luau index d9d5d6cc..9af7d656 100644 --- a/dist/pesde/luau/lifecycles/src/methods/destroy.luau +++ b/lifecycles/methods/destroy.luau @@ -1,12 +1,10 @@ -local lifecycleDestroyed = require("../hooks/lifecycle-destroyed") -local logger = require("../logger") -local methodToLifecycles = require("../method-to-lifecycles") -local types = require("../types") +local lifecycleDestroyed = require "../hooks/lifecycle-destroyed" +local logger = require "../logger" +local methodToLifecycles = require "../method-to-lifecycles" +local types = require "../types" local function destroy(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.alreadyDestroyed } end table.remove(methodToLifecycles[lifecycle.method], table.find(methodToLifecycles[lifecycle.method], lifecycle)) table.clear(lifecycle.callbacks) for _, callback in lifecycleDestroyed.callbacks do diff --git a/dist/pesde/luau/lifecycles/src/methods/on-registered.luau b/lifecycles/methods/on-registered.luau similarity index 54% rename from dist/pesde/luau/lifecycles/src/methods/on-registered.luau rename to lifecycles/methods/on-registered.luau index 7ddb009a..421c153d 100644 --- a/dist/pesde/luau/lifecycles/src/methods/on-registered.luau +++ b/lifecycles/methods/on-registered.luau @@ -1,17 +1,13 @@ -local logger = require("../logger") -local types = require("../types") +local logger = require "../logger" +local types = require "../types" local function onRegistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) end table.insert(lifecycle._selfRegistered, listener) - return function() - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end + return function() table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) end end return onRegistered diff --git a/dist/pesde/lune/lifecycles/src/methods/on-unregistered.luau b/lifecycles/methods/on-unregistered.luau similarity index 54% rename from dist/pesde/lune/lifecycles/src/methods/on-unregistered.luau rename to lifecycles/methods/on-unregistered.luau index 842040ec..d1193017 100644 --- a/dist/pesde/lune/lifecycles/src/methods/on-unregistered.luau +++ b/lifecycles/methods/on-unregistered.luau @@ -1,17 +1,13 @@ -local logger = require("../logger") -local types = require("../types") +local logger = require "../logger" +local types = require "../types" local function onUnregistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) end table.insert(lifecycle._selfUnregistered, listener) - return function() - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end + return function() table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) end end return onUnregistered diff --git a/dist/pesde/roblox/lifecycles/src/methods/register.luau b/lifecycles/methods/register.luau similarity index 65% rename from dist/pesde/roblox/lifecycles/src/methods/register.luau rename to lifecycles/methods/register.luau index 3fd74d56..b57cef34 100644 --- a/dist/pesde/roblox/lifecycles/src/methods/register.luau +++ b/lifecycles/methods/register.luau @@ -1,13 +1,11 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") +local logger = require "../logger" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool local function register(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then table.remove(lifecycle.callbacks, table.find(lifecycle.callbacks, callback)) end diff --git a/dist/pesde/roblox/lifecycles/src/methods/unregister-all.luau b/lifecycles/methods/unregister-all.luau similarity index 56% rename from dist/pesde/roblox/lifecycles/src/methods/unregister-all.luau rename to lifecycles/methods/unregister-all.luau index 5e6235af..0b4025f9 100644 --- a/dist/pesde/roblox/lifecycles/src/methods/unregister-all.luau +++ b/lifecycles/methods/unregister-all.luau @@ -1,13 +1,11 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") +local logger = require "../logger" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool local function clear(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end for _, callback in lifecycle.callbacks do threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) end diff --git a/dist/pesde/lune/lifecycles/src/methods/unregister.luau b/lifecycles/methods/unregister.luau similarity index 62% rename from dist/pesde/lune/lifecycles/src/methods/unregister.luau rename to lifecycles/methods/unregister.luau index 0ca7223f..8e33ed75 100644 --- a/dist/pesde/lune/lifecycles/src/methods/unregister.luau +++ b/lifecycles/methods/unregister.luau @@ -1,13 +1,11 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") +local logger = require "../logger" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool local function unregister(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end + if lifecycle._isDestroyed then logger:fatalError { template = logger.useAfterDestroy } end local index = table.find(lifecycle.callbacks, callback) if index then table.remove(lifecycle.callbacks, index) diff --git a/dist/npm/lifecycles/src/types.luau b/lifecycles/types.luau similarity index 100% rename from dist/npm/lifecycles/src/types.luau rename to lifecycles/types.luau diff --git a/dist/pesde/luau/logger/src/allow-web-links.luau b/logger/allow-web-links.luau similarity index 77% rename from dist/pesde/luau/logger/src/allow-web-links.luau rename to logger/allow-web-links.luau index dcd0bb82..dbc24d41 100644 --- a/dist/pesde/luau/logger/src/allow-web-links.luau +++ b/logger/allow-web-links.luau @@ -1,4 +1,4 @@ -local runtime = require("../runtime") +local runtime = require "../runtime" local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true diff --git a/logger/create.luau b/logger/create.luau new file mode 100644 index 00000000..f0a01f6e --- /dev/null +++ b/logger/create.luau @@ -0,0 +1,26 @@ +local allowWebLinks = require "./allow-web-links" +local formatLog = require "./format-log" +local runtime = require "../runtime" +local types = require "./types" + +local warn = runtime.warn +local threadpool = runtime.threadpool + +local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger + local self = {} :: types.Logger + self.type = "Logger" + + label = `[{label}] ` + errorInfoUrl = if allowWebLinks then errorInfoUrl else nil + + function self:warn(log) warn(label .. formatLog(self, log, errorInfoUrl)) end + + function self:error(log) threadpool.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) end + + function self:fatalError(log) error(label .. formatLog(self, log, errorInfoUrl)) end + + setmetatable(self :: any, { __index = templates }) + return self +end + +return create diff --git a/dist/pesde/lune/logger/src/format-log.luau b/logger/format-log.luau similarity index 96% rename from dist/pesde/lune/logger/src/format-log.luau rename to logger/format-log.luau index 3eeda21b..7c998deb 100644 --- a/dist/pesde/lune/logger/src/format-log.luau +++ b/logger/format-log.luau @@ -1,4 +1,4 @@ -local types = require("./types") +local types = require "./types" local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string local formattedTemplate = string.format(log.template, table.unpack(log)) diff --git a/logger/init.luau b/logger/init.luau new file mode 100644 index 00000000..a1ff2070 --- /dev/null +++ b/logger/init.luau @@ -0,0 +1,18 @@ +local allowWebLinks = require "@self/allow-web-links" +local create = require "@self/create" +local formatLog = require "@self/format-log" +local parseError = require "@self/parse-error" +local standardErrorInfoUrl = require "@self/standard-error-info-url" +local types = require "@self/types" + +export type Logger = types.Logger +export type Log = types.Log +export type Error = types.Error + +return table.freeze { + create = create, + formatLog = formatLog, + parseError = parseError, + allowWebLinks = allowWebLinks, + standardErrorInfoUrl = standardErrorInfoUrl, +} diff --git a/dist/pesde/luau/logger/src/parse-error.luau b/logger/parse-error.luau similarity index 85% rename from dist/pesde/luau/logger/src/parse-error.luau rename to logger/parse-error.luau index e43fe53d..a08a1cb9 100644 --- a/dist/pesde/luau/logger/src/parse-error.luau +++ b/logger/parse-error.luau @@ -1,4 +1,4 @@ -local types = require("./types") +local types = require "./types" local function parseError(err: string): types.Error return { diff --git a/dist/npm/logger/src/standard-error-info-url.luau b/logger/standard-error-info-url.luau similarity index 100% rename from dist/npm/logger/src/standard-error-info-url.luau rename to logger/standard-error-info-url.luau diff --git a/dist/npm/logger/src/types.luau b/logger/types.luau similarity index 100% rename from dist/npm/logger/src/types.luau rename to logger/types.luau diff --git a/lune/run-example.luau b/lune/run-example.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/lune/tiniest.luau b/lune/tiniest.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/package.json b/package.json deleted file mode 100644 index 38c80717..00000000 --- a/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "private": true, - "files": [ - "**/out", - "!**/*.tsbuildinfo" - ], - "prettier": { - "printWidth": 120, - "tabWidth": 4, - "useTabs": true, - "endOfLine": "lf" - }, - "devDependencies": { - "@rbxts/compiler-types": "1.2.3-types.1", - "@rbxts/types": "1.0.543", - "@typescript-eslint/eslint-plugin": "5.1.0", - "@typescript-eslint/parser": "5.1.0", - "eslint": "8.1.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-prettier": "4.0.0", - "eslint-plugin-roblox-ts": "0.0.32", - "prettier": "2.4.1", - "typescript": "4.4.4" - } -} \ No newline at end of file diff --git a/packages/dependencies/depend.luau b/packages/dependencies/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/packages/dependencies/depend.luau +++ /dev/null @@ -1,30 +0,0 @@ -local logger = require("./logger") -local types = require("./types") - -local function useBeforeConstructed(unresolved: types.UnresolvedDependency) - logger:fatalError({ template = logger.useBeforeConstructed, unresolved.dependency.name or "subdependency" }) -end - -local unresolvedMt = { - __metatable = "This metatable is locked.", - __index = useBeforeConstructed, - __newindex = useBeforeConstructed, -} - -function unresolvedMt:__tostring() - return "UnresolvedDependency" -end - --- Wtf luau -local function depend(dependency: types.Dependency): typeof(({} :: types.Dependency).new( - (nil :: any) :: Dependencies, - ... -)) - -- Return a mock value that will be resolved during dependency resolution. - return setmetatable({ - type = "UnresolvedDependency", - dependency = dependency, - }, unresolvedMt) :: any -end - -return depend diff --git a/packages/dependencies/index.d.ts b/packages/dependencies/index.d.ts deleted file mode 100644 index a5bddcde..00000000 --- a/packages/dependencies/index.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Lifecycle } from "../lifecycles"; - -declare namespace dependencies { - export type Dependency = Self & { - dependencies: Dependencies, - priority?: number, - new(dependencies: Dependencies, ...args: NewArgs): Dependency; - }; - - interface ProccessDependencyResult { - sortedDependencies: Dependency[]; - lifecycles: Lifecycle[]; - } - - export type SubdependenciesOf = T extends { dependencies: infer Dependencies } - ? Dependencies - : never; - - export function depend InstanceType>(dependency: T): InstanceType; - export function processDependencies(dependencies: Set>): ProccessDependencyResult; - export function sortByPriority(dependencies: Dependency[]): void; -} - -export = dependencies; -export as namespace dependencies; diff --git a/packages/dependencies/init.luau b/packages/dependencies/init.luau deleted file mode 100644 index e6b27b24..00000000 --- a/packages/dependencies/init.luau +++ /dev/null @@ -1,12 +0,0 @@ -local depend = require("@self/depend") -local processDependencies = require("@self/process-dependencies") -local sortByPriority = require("@self/sort-by-priority") -local types = require("@self/types") - -export type Dependency = types.Dependency - -return table.freeze({ - depend = depend, - processDependencies = processDependencies, - sortByPriority = sortByPriority, -}) diff --git a/packages/dependencies/logger.luau b/packages/dependencies/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/packages/dependencies/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/dependencies", logger.standardErrorInfoUrl("dependencies"), { - useBeforeConstructed = "Cannot use %s before it is constructed. Are you using the dependency outside a class method?", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/packages/dependencies/process-dependencies.luau b/packages/dependencies/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/packages/dependencies/process-dependencies.luau +++ /dev/null @@ -1,57 +0,0 @@ -local lifecycles = require("../lifecycles") -local types = require("./types") - -export type ProccessDependencyResult = { - sortedDependencies: { types.Dependency }, - lifecycles: { lifecycles.Lifecycle }, -} - -type Set = { [T]: true } - -local function processDependencies(dependencies: Set>): ProccessDependencyResult - local sortedDependencies = {} - local lifecycles = {} - - -- TODO: optimize ts - local function visitDependency(dependency: types.Dependency) - -- print("Visiting dependency", dependency) - - for key, value in dependency :: any do - if key == "dependencies" then - -- print("Checking [prvd.dependencies]") - if typeof(value) == "table" then - for key, value in value do - -- print("Checking key", key, "value", value) - if typeof(value) == "table" and value.type == "UnresolvedDependency" then - local unresolved: types.UnresolvedDependency = value - -- print("Got unresolved dependency", unresolved.dependency, "visiting") - visitDependency(unresolved.dependency) - end - end - end - - continue - end - - if typeof(value) == "table" and value.type == "Lifecycle" and not table.find(lifecycles, value) then - table.insert(lifecycles, value) - end - end - - if dependencies[dependency] and not table.find(sortedDependencies, dependency) then - -- print("Pushing to sort") - table.insert(sortedDependencies, dependency) - end - end - - for dependency in dependencies do - visitDependency(dependency) - end - - return { - sortedDependencies = sortedDependencies, - lifecycles = lifecycles, - } -end - -return processDependencies diff --git a/packages/dependencies/process-dependencies.spec.luau b/packages/dependencies/process-dependencies.spec.luau deleted file mode 100644 index 0fcfcac8..00000000 --- a/packages/dependencies/process-dependencies.spec.luau +++ /dev/null @@ -1,67 +0,0 @@ -local depend = require("./depend") -local processDependencies = require("./process-dependencies") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -local function nickname(name: string) - return function(tbl: T): T - return setmetatable(tbl :: any, { - __tostring = function() - return name - end, - }) - end -end - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("processDependencies", function() - test("sortedDependencies", function() - local first = nickname("first")({}) - - local second = nickname("second")({ - dependencies = { - toFirst = depend(first :: any), - toFirstAgain = depend(first :: any), - }, - }) - - local third = nickname("third")({ - dependencies = { - toSecond = depend(second :: any), - }, - }) - - local fourth = nickname("fourth")({ - dependencies = { - toFirst = depend(first :: any), - toSecond = depend(second :: any), - toThird = depend(third :: any), - }, - }) - - local processed = processDependencies({ - [first] = true, - [second] = true, - [third] = true, - [fourth] = true, - } :: any) - - expect(typeof(processed)).is("table") - expect(processed).has_key("sortedDependencies") - expect(typeof(processed.sortedDependencies)).is("table") - - local sortedDependencies = processed.sortedDependencies - - expect(typeof(sortedDependencies)).is("table") - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - expect(sortedDependencies[4]).is(fourth) - end) - - test("lifecycles", function() end) - end) -end diff --git a/packages/dependencies/prvd.config.luau b/packages/dependencies/prvd.config.luau deleted file mode 100644 index f265b2db..00000000 --- a/packages/dependencies/prvd.config.luau +++ /dev/null @@ -1,15 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "dependencies", - description = "Dependency resolution logic for Prvd 'M Wrong", - - types = table.freeze({ - ["Dependency"] = "Dependency", - }), - - dependencies = configure.dependencies({ - lifecycles = true, - logger = true, - }), -}) diff --git a/packages/dependencies/sort-by-priority.luau b/packages/dependencies/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/packages/dependencies/sort-by-priority.luau +++ /dev/null @@ -1,14 +0,0 @@ -local types = require("./types") - -local function sortByPriority(dependencies: { types.Dependency }) - table.sort(dependencies, function(left: any, right: any) - if left.priority ~= right.priority then - return (left.priority or 1) > (right.priority or 1) - end - local leftIndex = table.find(dependencies, left) - local rightIndex = table.find(dependencies, right) - return leftIndex < rightIndex - end) -end - -return sortByPriority diff --git a/packages/dependencies/sort-by-priority.spec.luau b/packages/dependencies/sort-by-priority.spec.luau deleted file mode 100644 index eeb34933..00000000 --- a/packages/dependencies/sort-by-priority.spec.luau +++ /dev/null @@ -1,52 +0,0 @@ -local sortByPriority = require("./sort-by-priority") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("sortByPriority", function() - test("dependencies", function() - local first = {} - - local second = { - toFirst = first, - } - - local third = { - toSecond = second, - } - - local sortedDependencies = { - first, - second, - third, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(first) - expect(sortedDependencies[2]).is(second) - expect(sortedDependencies[3]).is(third) - end) - - test("priority", function() - local low = {} - - local high = { - priority = 500, - } - - local sortedDependencies = { - low, - high, - } - - sortByPriority(sortedDependencies :: any) - - expect(sortedDependencies[1]).is(high) - expect(sortedDependencies[2]).is(low) - end) - end) -end diff --git a/packages/dependencies/types.luau b/packages/dependencies/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/packages/dependencies/types.luau +++ /dev/null @@ -1,14 +0,0 @@ -export type Dependency = Self & { - dependencies: Dependencies, - priority: number?, - new: (dependencies: Dependencies, NewArgs...) -> Dependency, -} - -export type UnresolvedDependency = { - type: "UnresolvedDependency", - dependency: Dependency, -} - -export type dependencies = { __prvdmwrong_dependencies: never } - -return nil diff --git a/packages/lifecycles/create.luau b/packages/lifecycles/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/packages/lifecycles/create.luau +++ /dev/null @@ -1,45 +0,0 @@ -local await = require("./methods/await") -local clear = require("./methods/unregister-all") -local destroy = require("./methods/destroy") -local lifecycleConstructed = require("./hooks/lifecycle-constructed") -local methodToLifecycles = require("./method-to-lifecycles") -local onRegistered = require("./methods/on-registered") -local onUnregistered = require("./methods/on-unregistered") -local register = require("./methods/register") -local types = require("./types") -local unregister = require("./methods/unregister") - -local function create( - method: string, - onFire: (lifecycle: types.Lifecycle, Args...) -> () -): types.Lifecycle - local self: types.Self = { - _isDestroyed = false, - _selfRegistered = {}, - _selfUnregistered = {}, - - type = "Lifecycle", - callbacks = {}, - - fire = onFire, - method = method, - register = register, - unregister = unregister, - clear = clear, - onRegistered = onRegistered, - onUnregistered = onUnregistered, - await = await, - destroy = destroy, - } :: any - - methodToLifecycles[method] = methodToLifecycles[method] or {} - table.insert(methodToLifecycles[method], self) - - for _, onLifecycleConstructed in lifecycleConstructed.callbacks do - onLifecycleConstructed(self :: types.Lifecycle) - end - - return self -end - -return create diff --git a/packages/lifecycles/handlers/fire-concurrent.luau b/packages/lifecycles/handlers/fire-concurrent.luau deleted file mode 100644 index f279b888..00000000 --- a/packages/lifecycles/handlers/fire-concurrent.luau +++ /dev/null @@ -1,10 +0,0 @@ -local runtime = require("../../runtime") -local types = require("../types") - -local function fireConcurrent(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - runtime.threadpool.spawn(callback, ...) - end -end - -return fireConcurrent diff --git a/packages/lifecycles/handlers/fire-sequential.luau b/packages/lifecycles/handlers/fire-sequential.luau deleted file mode 100644 index 80911ad9..00000000 --- a/packages/lifecycles/handlers/fire-sequential.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -local function fireSequential(lifecycle: types.Lifecycle, ...: Args...) - for _, callback in lifecycle.callbacks do - callback(...) - end -end - -return fireSequential diff --git a/packages/lifecycles/hooks/lifecycle-constructed.luau b/packages/lifecycles/hooks/lifecycle-constructed.luau deleted file mode 100644 index 8ea4d81b..00000000 --- a/packages/lifecycles/hooks/lifecycle-constructed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleConstructed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleConstructed = onLifecycleConstructed, -}) diff --git a/packages/lifecycles/hooks/lifecycle-destroyed.luau b/packages/lifecycles/hooks/lifecycle-destroyed.luau deleted file mode 100644 index 47abcfab..00000000 --- a/packages/lifecycles/hooks/lifecycle-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle) -> () } = {} - -local function onLifecycleDestroyed(listener: (lifecycle: types.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleDestroyed = onLifecycleDestroyed, -}) diff --git a/packages/lifecycles/hooks/lifecycle-registered.luau b/packages/lifecycles/hooks/lifecycle-registered.luau deleted file mode 100644 index fab588a3..00000000 --- a/packages/lifecycles/hooks/lifecycle-registered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleRegistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleRegistered = onLifecycleRegistered, -}) diff --git a/packages/lifecycles/hooks/lifecycle-unregistered.luau b/packages/lifecycles/hooks/lifecycle-unregistered.luau deleted file mode 100644 index 0ec81756..00000000 --- a/packages/lifecycles/hooks/lifecycle-unregistered.luau +++ /dev/null @@ -1,20 +0,0 @@ -local types = require("../types") - -local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} - -local function onLifecycleUnregistered( - listener: ( - lifecycle: types.Lifecycle, - callback: (Args...) -> () - ) -> () -): () -> () - table.insert(callbacks, listener :: any) - return function() - table.remove(callbacks, table.find(callbacks, listener :: any)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUnregistered = onLifecycleUnregistered, -}) diff --git a/packages/lifecycles/index.d.ts b/packages/lifecycles/index.d.ts deleted file mode 100644 index 0e5f324b..00000000 --- a/packages/lifecycles/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace lifecycles { - export interface Lifecycle { - type: "Lifecycle"; - - callbacks: Array<(...args: Args) => void>; - method: string; - - register(callback: (...args: Args) => void): void; - fire(...args: Args): void; - unregister(callback: (...args: Args) => void): void; - clear(): void; - onRegistered(listener: (callback: (...args: Args) => void) => void): () => void; - onUnegistered(listener: (callback: (...args: Args) => void) => void): () => void; - await(): LuaTuple; - destroy(): void; - } - - export function create( - method: string, - onFire: (lifecycle: Lifecycle, ...args: Args) => void - ): Lifecycle; - - export namespace handlers { - export function fireConcurrent(lifecycle: Lifecycle, ...args: Args): void; - export function fireSequential(lifecycle: Lifecycle, ...args: Args): void; - } - - export namespace hooks { - export function onLifecycleConstructed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleDestroyed(callback: (lifecycle: Lifecycle) => void): () => void; - export function onLifecycleRegistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - export function onLifecycleUnregistered( - callback: (lifecycle: Lifecycle, callback: (...args: Args) => void) => void - ): () => void; - } - - export namespace _ { - export const methodToLifecycles: Map; - } -} - -export = lifecycles; -export as namespace lifecycles; diff --git a/packages/lifecycles/init.luau b/packages/lifecycles/init.luau deleted file mode 100644 index dbec091b..00000000 --- a/packages/lifecycles/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local fireConcurrent = require("@self/handlers/fire-concurrent") -local fireSequential = require("@self/handlers/fire-sequential") -local lifecycleConstructed = require("@self/hooks/lifecycle-constructed") -local lifecycleDestroyed = require("@self/hooks/lifecycle-destroyed") -local lifecycleRegistered = require("@self/hooks/lifecycle-registered") -local lifecycleUnregistered = require("@self/hooks/lifecycle-unregistered") -local methodToLifecycles = require("@self/method-to-lifecycles") -local types = require("@self/types") - -export type Lifecycle = types.Lifecycle - -return table.freeze({ - create = create, - handlers = table.freeze({ - fireConcurrent = fireConcurrent, - fireSequential = fireSequential, - }), - hooks = table.freeze({ - onLifecycleRegistered = lifecycleRegistered.onLifecycleRegistered, - onLifecycleUnregistered = lifecycleUnregistered.onLifecycleUnregistered, - onLifecycleConstructed = lifecycleConstructed.onLifecycleConstructed, - onLifecycleDestroyed = lifecycleDestroyed.onLifecycleDestroyed, - }), - _ = table.freeze({ - methodToLifecycles = methodToLifecycles, - }), -}) diff --git a/packages/lifecycles/logger.luau b/packages/lifecycles/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/packages/lifecycles/logger.luau +++ /dev/null @@ -1,6 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/lifecycles", logger.standardErrorInfoUrl("lifecycles"), { - useAfterDestroy = "Cannot use Lifecycle after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Lifecycle.", -}) diff --git a/packages/lifecycles/method-to-lifecycles.luau b/packages/lifecycles/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/packages/lifecycles/method-to-lifecycles.luau +++ /dev/null @@ -1,5 +0,0 @@ -local types = require("./types") - -local methodToLifecycles: { [string]: { types.Lifecycle } } = {} - -return methodToLifecycles diff --git a/packages/lifecycles/methods/await.luau b/packages/lifecycles/methods/await.luau deleted file mode 100644 index ed8299d6..00000000 --- a/packages/lifecycles/methods/await.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function await(lifecycle: types.Self): Args... - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local currentThread = coroutine.running() - local function callback(...: Args...) - lifecycle:unregister(callback) - coroutine.resume(currentThread, ...) - end - lifecycle:register(callback) - return coroutine.yield() -end - -return await diff --git a/packages/lifecycles/methods/destroy.luau b/packages/lifecycles/methods/destroy.luau deleted file mode 100644 index d9d5d6cc..00000000 --- a/packages/lifecycles/methods/destroy.luau +++ /dev/null @@ -1,18 +0,0 @@ -local lifecycleDestroyed = require("../hooks/lifecycle-destroyed") -local logger = require("../logger") -local methodToLifecycles = require("../method-to-lifecycles") -local types = require("../types") - -local function destroy(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - table.remove(methodToLifecycles[lifecycle.method], table.find(methodToLifecycles[lifecycle.method], lifecycle)) - table.clear(lifecycle.callbacks) - for _, callback in lifecycleDestroyed.callbacks do - callback(lifecycle) - end - lifecycle._isDestroyed = true -end - -return destroy diff --git a/packages/lifecycles/methods/on-registered.luau b/packages/lifecycles/methods/on-registered.luau deleted file mode 100644 index 7ddb009a..00000000 --- a/packages/lifecycles/methods/on-registered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onRegistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end - table.insert(lifecycle._selfRegistered, listener) - return function() - table.remove(lifecycle._selfRegistered, table.find(lifecycle._selfRegistered, listener)) - end -end - -return onRegistered diff --git a/packages/lifecycles/methods/on-unregistered.luau b/packages/lifecycles/methods/on-unregistered.luau deleted file mode 100644 index 842040ec..00000000 --- a/packages/lifecycles/methods/on-unregistered.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function onUnregistered(lifecycle: types.Self, listener: (callback: (Args...) -> ()) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end - table.insert(lifecycle._selfUnregistered, listener) - return function() - table.remove(lifecycle._selfUnregistered, table.find(lifecycle._selfUnregistered, listener)) - end -end - -return onUnregistered diff --git a/packages/lifecycles/methods/register.luau b/packages/lifecycles/methods/register.luau deleted file mode 100644 index 3fd74d56..00000000 --- a/packages/lifecycles/methods/register.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function register(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - if _G.PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS then - table.remove(lifecycle.callbacks, table.find(lifecycle.callbacks, callback)) - end - table.insert(lifecycle.callbacks, callback) - threadpool.spawnCallbacks(lifecycle._selfRegistered, callback) -end - -return register diff --git a/packages/lifecycles/methods/unregister-all.luau b/packages/lifecycles/methods/unregister-all.luau deleted file mode 100644 index 5e6235af..00000000 --- a/packages/lifecycles/methods/unregister-all.luau +++ /dev/null @@ -1,17 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function clear(lifecycle: types.Self) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - for _, callback in lifecycle.callbacks do - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end - table.clear(lifecycle.callbacks) -end - -return clear diff --git a/packages/lifecycles/methods/unregister.luau b/packages/lifecycles/methods/unregister.luau deleted file mode 100644 index 0ca7223f..00000000 --- a/packages/lifecycles/methods/unregister.luau +++ /dev/null @@ -1,18 +0,0 @@ -local logger = require("../logger") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function unregister(lifecycle: types.Self, callback: (Args...) -> ()) - if lifecycle._isDestroyed then - logger:fatalError({ template = logger.useAfterDestroy }) - end - local index = table.find(lifecycle.callbacks, callback) - if index then - table.remove(lifecycle.callbacks, index) - threadpool.spawnCallbacks(lifecycle._selfUnregistered, callback) - end -end - -return unregister diff --git a/packages/lifecycles/prvd.config.luau b/packages/lifecycles/prvd.config.luau deleted file mode 100644 index fc83a55e..00000000 --- a/packages/lifecycles/prvd.config.luau +++ /dev/null @@ -1,15 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "lifecycles", - description = "Provider method lifecycles implementation for Prvd 'M Wrong", - - dependencies = configure.dependencies({ - logger = true, - runtime = true, - }), - - types = { - ["Lifecycle"] = "Lifecycle", - }, -}) diff --git a/packages/lifecycles/types.luau b/packages/lifecycles/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/packages/lifecycles/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Lifecycle = { - type: "Lifecycle", - - callbacks: { (Args...) -> () }, - method: string, - - register: (self: Lifecycle, callback: (Args...) -> ()) -> (), - fire: (self: Lifecycle, Args...) -> (), - unregister: (self: Lifecycle, callback: (Args...) -> ()) -> (), - clear: (self: Lifecycle) -> (), - onRegistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - onUnregistered: (self: Lifecycle, listener: (callback: (Args...) -> ()) -> ()) -> () -> (), - await: (self: Lifecycle) -> Args..., - destroy: (self: Lifecycle) -> (), -} - -export type Self = Lifecycle & { - _isDestroyed: boolean, - _selfRegistered: { (callback: (Args...) -> ()) -> () }, - _selfUnregistered: { (callback: (Args...) -> ()) -> () }, -} - -return nil diff --git a/packages/logger/allow-web-links.luau b/packages/logger/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/packages/logger/allow-web-links.luau +++ /dev/null @@ -1,5 +0,0 @@ -local runtime = require("../runtime") - -local allowWebLinks = if runtime.name == "roblox" then game:GetService("RunService"):IsStudio() else true - -return allowWebLinks diff --git a/packages/logger/create.luau b/packages/logger/create.luau deleted file mode 100644 index 943aab25..00000000 --- a/packages/logger/create.luau +++ /dev/null @@ -1,32 +0,0 @@ -local allowWebLinks = require("./allow-web-links") -local formatLog = require("./format-log") -local runtime = require("../runtime") -local types = require("./types") - -local task = runtime.task -local warn = runtime.warn - -local function create(label: string, errorInfoUrl: string?, templates: T): types.Logger - local self = {} :: types.Logger - self.type = "Logger" - - label = `[{label}] ` - errorInfoUrl = if allowWebLinks then errorInfoUrl else nil - - function self:warn(log) - warn(label .. formatLog(self, log, errorInfoUrl)) - end - - function self:error(log) - task.spawn(error, label .. formatLog(self, log, errorInfoUrl), 0) - end - - function self:fatalError(log) - error(label .. formatLog(self, log, errorInfoUrl)) - end - - setmetatable(self :: any, { __index = templates }) - return self -end - -return create diff --git a/packages/logger/format-log.luau b/packages/logger/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/packages/logger/format-log.luau +++ /dev/null @@ -1,43 +0,0 @@ -local types = require("./types") - -local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string - local formattedTemplate = string.format(log.template, table.unpack(log)) - - local error = log.error - local trace: string? = log.trace - - if error then - trace = error.trace - formattedTemplate = string.gsub(formattedTemplate, "ERROR_MESSAGE", error.message) - end - - local id: string? - - -- TODO: find a better way to do ts while still being ergonomic - for templateKey, template in (self :: any) :: { [string]: string } do - if template == log.template then - id = templateKey - break - end - end - - if id then - formattedTemplate ..= `\nID: {id}` - end - - if errorInfoUrl then - formattedTemplate ..= `\nLearn more: {errorInfoUrl}` - if id then - formattedTemplate ..= `#{string.lower(id)}` - end - end - - if trace then - formattedTemplate ..= `\n---- Stack trace ----\n{trace}` - end - - -- Labels are added from createLogger, so we don't add it here - return string.gsub(formattedTemplate, "\n", "\n ") -end - -return formatLog diff --git a/packages/logger/index.d.ts b/packages/logger/index.d.ts deleted file mode 100644 index 85251a07..00000000 --- a/packages/logger/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare namespace Logger { - export interface Error { - type: "Error"; - raw: string; - message: string; - trace: string; - } - - interface LogProps { - template: string; - error?: Error; - trace?: string; - } - - export type Log = LogProps & unknown[]; - - interface LoggerProps { - print(props: Log): void; - warn(props: Log): void; - error(props: Log): void; - fatalError(props: Log): never; - } - - export type Logger> = LoggerProps & Templates; - - export function create>( - label: string, - errorInfoUrl: string | undefined, - templates: Templates - ): Logger; - - export function formatLog>( - logger: Logger, - log: Log, - errorInfoUrl?: string - ): string; - - export function parseError(err: string): Error; - - export const allowWebLinks: boolean; - export function standardErrorInfoUrl(label: string): string; -} - -export = Logger; -export as namespace Logger; diff --git a/packages/logger/init.luau b/packages/logger/init.luau deleted file mode 100644 index 52760a5d..00000000 --- a/packages/logger/init.luau +++ /dev/null @@ -1,18 +0,0 @@ -local allowWebLinks = require("@self/allow-web-links") -local create = require("@self/create") -local formatLog = require("@self/format-log") -local parseError = require("@self/parse-error") -local standardErrorInfoUrl = require("@self/standard-error-info-url") -local types = require("@self/types") - -export type Logger = types.Logger -export type Log = types.Log -export type Error = types.Error - -return table.freeze({ - create = create, - formatLog = formatLog, - parseError = parseError, - allowWebLinks = allowWebLinks, - standardErrorInfoUrl = standardErrorInfoUrl, -}) diff --git a/packages/logger/parse-error.luau b/packages/logger/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/packages/logger/parse-error.luau +++ /dev/null @@ -1,12 +0,0 @@ -local types = require("./types") - -local function parseError(err: string): types.Error - return { - type = "Error", - raw = err, - message = err:gsub("^.+:%d+:%s*", ""), - trace = debug.traceback(nil, 2), - } -end - -return parseError diff --git a/packages/logger/prvd.config.luau b/packages/logger/prvd.config.luau deleted file mode 100644 index 11c071ba..00000000 --- a/packages/logger/prvd.config.luau +++ /dev/null @@ -1,16 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "logger", - description = "Logging for Prvd 'M Wrong", - - dependencies = configure.dependencies({ - runtime = true, - }), - - types = { - ["Logger"] = true, - Log = true, - Error = true, - }, -}) diff --git a/packages/logger/standard-error-info-url.luau b/packages/logger/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/packages/logger/standard-error-info-url.luau +++ /dev/null @@ -1,5 +0,0 @@ -local function standardErrorInfoUrl(label: string): string - return `https://prvdmwrong.luau.page/api-reference/{label}/errors` -end - -return standardErrorInfoUrl diff --git a/packages/logger/types.luau b/packages/logger/types.luau deleted file mode 100644 index d1699037..00000000 --- a/packages/logger/types.luau +++ /dev/null @@ -1,23 +0,0 @@ -export type Error = { - type: "Error", - raw: string, - message: string, - trace: string, -} - -export type Log = { - template: string, - error: Error?, - trace: string?, - [number]: unknown, -} - -export type Logger = Templates & { - type: "Logger", - print: (self: Logger, props: Log) -> (), - warn: (self: Logger, props: Log) -> (), - error: (self: Logger, props: Log) -> (), - fatalError: (self: Logger, props: Log) -> never, -} - -return nil diff --git a/packages/providers/README.md b/packages/providers/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/providers/create.luau b/packages/providers/create.luau deleted file mode 100644 index 016b8a6d..00000000 --- a/packages/providers/create.luau +++ /dev/null @@ -1,30 +0,0 @@ -local nameOf = require("./name-of") -local providerClasses = require("./provider-classes") -local types = require("./types") - -local function createProvider(self: Self): types.Provider - local provider: types.Provider = self :: any - - if provider.__index == nil then - provider.__index = provider - end - - if provider.__tostring == nil then - provider.__tostring = nameOf - end - - if provider.new == nil then - function provider.new(dependencies) - local self: types.Provider = setmetatable({}, provider) :: any - if provider.constructor then - return provider.constructor(self, dependencies) or self - end - return self - end - end - - providerClasses[provider] = true - return provider -end - -return createProvider diff --git a/packages/providers/index.d.ts b/packages/providers/index.d.ts deleted file mode 100644 index 2ab36e15..00000000 --- a/packages/providers/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Dependency } from "../dependencies"; - -declare namespace providers { - export type Provider = Dependency< - Self & { - __index: Provider; - name?: string; - constructor?(dependencies: Dependencies): void; - start?(): void; - destroy?(): void; - }, - Dependencies - >; - - // Class decorator syntax - export function create InstanceType>(self: Self): Provider; - // Normal syntax - export function create(self: Self): Provider; - - export function nameOf(provider: Provider): string; - - export namespace _ { - export const providerClasses: Set>; - } - - export interface Start { - start(): void; - } - - export interface Destroy { - destroy(): void; - } -} - -export = providers; -export as namespace providers; diff --git a/packages/providers/init.luau b/packages/providers/init.luau deleted file mode 100644 index d678d850..00000000 --- a/packages/providers/init.luau +++ /dev/null @@ -1,16 +0,0 @@ -local create = require("@self/create") -local nameOf = require("@self/name-of") -local providerClasses = require("@self/provider-classes") -local types = require("@self/types") - -export type Provider = types.Provider - -local providers = table.freeze({ - create = create, - nameOf = nameOf, - _ = table.freeze({ - providerClasses = providerClasses, - }), -}) - -return providers diff --git a/packages/providers/name-of.luau b/packages/providers/name-of.luau deleted file mode 100644 index 3f86ceec..00000000 --- a/packages/providers/name-of.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -local function nameOf(provider: types.Provider) - return provider.name or "Provider" -end - -return nameOf diff --git a/packages/providers/provider-classes.luau b/packages/providers/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/packages/providers/provider-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local providerClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return providerClasses diff --git a/packages/providers/prvd.config.luau b/packages/providers/prvd.config.luau deleted file mode 100644 index 5d8b602f..00000000 --- a/packages/providers/prvd.config.luau +++ /dev/null @@ -1,17 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "providers", - description = "Provider creation for Prvd 'M Wrong", - - types = { - ["Provider"] = "Provider", - }, - - dependencies = configure.dependencies({ - dependencies = true, - logger = true, - lifecycles = true, - runtime = true, - }), -}) diff --git a/packages/providers/types.luau b/packages/providers/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/packages/providers/types.luau +++ /dev/null @@ -1,12 +0,0 @@ -local dependencies = require("../dependencies") - -export type Provider = dependencies.Dependency, - __tostring: (self: Provider) -> string, - name: string?, - constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, -}, Dependencies> - -return nil diff --git a/packages/prvdmwrong/index.d.ts b/packages/prvdmwrong/index.d.ts deleted file mode 100644 index 2058129c..00000000 --- a/packages/prvdmwrong/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import dependencies from "../dependencies"; -import lifecycles from "../lifecycles"; -import providers from "../providers"; -import roots from "../roots"; - -declare namespace prvd { - export type Provider = providers.Provider; - export interface Lifecycle extends lifecycles.Lifecycle { } - export type SubdependenciesOf = dependencies.SubdependenciesOf; - export interface Root extends roots.Root { } - export interface StartedRoot extends roots.StartedRoot { } - - export interface Start extends providers.Start { } - export interface Destroy extends providers.Destroy { } - - export const provider: typeof providers.create; - export const root: typeof roots.create; - export const depend: typeof dependencies.depend; - export const nameOf: typeof providers.nameOf; - - export const lifecycle: typeof lifecycles.create; - export const fireConcurrent: typeof lifecycles.handlers.fireConcurrent; - export const fireSequential: typeof lifecycles.handlers.fireSequential; - - export namespace hooks { - export const onLifecycleConstructed: typeof lifecycles.hooks.onLifecycleConstructed; - export const onLifecycleDestroyed: typeof lifecycles.hooks.onLifecycleDestroyed; - export const onLifecycleRegistered: typeof lifecycles.hooks.onLifecycleRegistered; - export const onLifecycleUnregistered: typeof lifecycles.hooks.onLifecycleUnregistered; - - export const onLifecycleUsed: typeof roots.hooks.onLifecycleUsed; - export const onProviderUsed: typeof roots.hooks.onProviderUsed; - export const onRootUsed: typeof roots.hooks.onRootUsed; - export const onRootConstructing: typeof roots.hooks.onRootConstructing; - export const onRootStarted: typeof roots.hooks.onRootStarted; - export const onRootFinished: typeof roots.hooks.onRootFinished; - export const onRootDestroyed: typeof roots.hooks.onRootDestroyed; - } -} - -export = prvd; -export as namespace prvd; diff --git a/packages/prvdmwrong/init.luau b/packages/prvdmwrong/init.luau deleted file mode 100644 index 1381801d..00000000 --- a/packages/prvdmwrong/init.luau +++ /dev/null @@ -1,45 +0,0 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") - -export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle -export type Root = roots.Root -export type StartedRoot = roots.StartedRoot - -local prvd = { - provider = providers.create, - root = roots.create, - depend = dependencies.depend, - nameOf = providers.nameOf, - - lifecycle = lifecycles.create, - fireConcurrent = lifecycles.handlers.fireConcurrent, - fireSequential = lifecycles.handlers.fireSequential, - - hooks = table.freeze({ - onProviderUsed = roots.hooks.onProviderUsed, - onLifecycleUsed = roots.hooks.onLifecycleUsed, - onRootConstructing = roots.hooks.onRootConstructing, - onRootUsed = roots.hooks.onRootUsed, - onRootStarted = roots.hooks.onRootStarted, - onRootFinished = roots.hooks.onRootFinished, - onRootDestroyed = roots.hooks.onRootDestroyed, - - onLifecycleConstructed = lifecycles.hooks.onLifecycleConstructed, - onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, - onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, - onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), -} - -type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) - -local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -local module: PrvdModule = setmetatable(prvd, mt) :: any -return module diff --git a/packages/prvdmwrong/prvd.config.luau b/packages/prvdmwrong/prvd.config.luau deleted file mode 100644 index b094986a..00000000 --- a/packages/prvdmwrong/prvd.config.luau +++ /dev/null @@ -1,20 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "prvdmwrong", - description = "Entry point to Prvd 'M Wrong", - - types = { - ["Lifecycle"] = "Lifecycle", - ["Provider"] = "Provider", - Root = true, - StartedRoot = true, - }, - - dependencies = configure.dependencies({ - dependencies = true, - lifecycles = true, - providers = true, - roots = true, - }), -}) diff --git a/packages/rbx-components/component-classes.luau b/packages/rbx-components/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/packages/rbx-components/component-classes.luau +++ /dev/null @@ -1,7 +0,0 @@ -local types = require("./types") - -type Set = { [T]: true } - -local componentClasses: Set> = setmetatable({}, { __mode = "k" }) :: any - -return componentClasses diff --git a/packages/rbx-components/component-provider.luau b/packages/rbx-components/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/packages/rbx-components/component-provider.luau +++ /dev/null @@ -1,185 +0,0 @@ -local CollectionService = game:GetService("CollectionService") - -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") - -local threadpool = runtime.threadpool - -type Set = { [T]: true } -type ConstructedComponent = types.AnyComponent -type LuauBug = any - -local ComponentProvider = {} -ComponentProvider.priority = -math.huge -ComponentProvider.name = "@rbx-components" - -function ComponentProvider.constructor(self: ComponentProvider) - self.componentClasses = {} :: Set - self.tagToComponentClasses = {} :: { [string]: Set } - self.instanceToComponents = {} :: { [Instance]: { [types.AnyComponent]: ConstructedComponent } } - self.componentToInstances = {} :: { [types.AnyComponent]: Set? } - self.constructedToClass = {} :: { [ConstructedComponent]: types.AnyComponent? } - - self._destroyingConnections = {} :: { [Instance]: RBXScriptConnection } - self._connections = {} :: { RBXScriptConnection } -end - -function ComponentProvider.start(self: ComponentProvider) - for tag, components in self.tagToComponentClasses do - local function onTagAdded(instance) - local instanceToComponents = self.instanceToComponents[instance] - if not instanceToComponents then - instanceToComponents = {} - self.instanceToComponents[instance] = instanceToComponents - end - - for componentClass in components do - if - (componentClass.blacklistInstances and (componentClass.blacklistInstances :: LuauBug)[instance]) - or (componentClass.whitelistInstances and not (componentClass.whitelistInstances :: LuauBug)[instance]) - or (componentClass.instanceCheck and not componentClass.instanceCheck(instance)) - then - continue - end - - local component: ConstructedComponent = instanceToComponents[componentClass] - if not component then - component = componentClass.new(instance) - instanceToComponents[componentClass] = component - self.constructedToClass[component :: any] = componentClass - end - - if component.added then - component:added() - end - end - - if not self._destroyingConnections[instance] then - self._destroyingConnections[instance] = instance.Destroying:Once(function() - for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end - end - table.clear(instanceToComponents) - self.instanceToComponents[instance] = nil - end) - end - end - - table.insert(self._connections, CollectionService:GetInstanceAddedSignal(tag):Connect(onTagAdded)) - table.insert(self._connections, CollectionService:GetInstanceRemovedSignal(tag):Connect(function(instance) end)) - - for _, instance in CollectionService:GetTagged(tag) do - onTagAdded(instance) - end - end -end - -function ComponentProvider.destroy(self: ComponentProvider) - for _, components in self.instanceToComponents do - for _, component in components do - if component.destroy then - component:destroy() - end - end - table.clear(components) - end - - table.clear(self.componentClasses) - table.clear(self.tagToComponentClasses) - table.clear(self.instanceToComponents) - table.clear(self.componentToInstances) - table.clear(self.constructedToClass) - - for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end - end - - for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end - end - - table.clear(self._connections) - table.clear(self._destroyingConnections) -end - -function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end - - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end - - if class.tag then - local tagToComponentClasses = self.tagToComponentClasses[class.tag] - - if tagToComponentClasses then - if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) - end - else - tagToComponentClasses = {} - self.tagToComponentClasses[class.tag] = tagToComponentClasses - end - - (tagToComponentClasses :: any)[class] = true - end - - self.componentClasses[class] = true - self.componentToInstances[class] = {} -end - -function ComponentProvider.getFromInstance( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - return self.instanceToComponents[instance :: any][class] -end - -function ComponentProvider.getAllComponents( - self: ComponentProvider, - class: types.Component -): Set> - local result = {} - for _, components in self.instanceToComponents do - for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end - end - end - return result :: any -end - -function ComponentProvider.addComponent( - self: ComponentProvider, - class: types.Component, - instance: I -): types.Component? - error("not yet implemented") -end - -function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) - local constructed = self:getFromInstance(class, instance) - if constructed then - self.instanceToComponents[instance :: any][class] = nil - - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end - end -end - -export type ComponentProvider = typeof(ComponentProvider) -return providers.create(ComponentProvider) diff --git a/packages/rbx-components/create.luau b/packages/rbx-components/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/packages/rbx-components/create.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("./component-classes") -local types = require("./types") - --- TODO: prvdmwrong/classes package? -local function create(self: Self): types.Component - local component: types.Component = self :: any - - if component.__index == nil then - component.__index = component - end - - -- TODO: abstract nameOf - - if component.new == nil then - function component.new(instance: any) - local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end - return self - end - end - - componentClasses[component] = true - return component -end - -return create diff --git a/packages/rbx-components/extend-root/create-component-class-provider.luau b/packages/rbx-components/extend-root/create-component-class-provider.luau deleted file mode 100644 index 9d5ae999..00000000 --- a/packages/rbx-components/extend-root/create-component-class-provider.luau +++ /dev/null @@ -1,31 +0,0 @@ -local ComponentProvider = require("../component-provider") -local providers = require("../../providers") -local types = require("../types") - -local ComponentClassProvider = {} -ComponentClassProvider.priority = -math.huge -ComponentClassProvider.name = "@rbx-components.ComponentClassProvider" -ComponentClassProvider.dependencies = table.freeze({ - componentProvider = ComponentProvider, -}) - -ComponentClassProvider._components = {} :: { types.AnyComponent } - -function ComponentClassProvider.constructor( - self: ComponentClassProvider, - dependencies: typeof(ComponentClassProvider.dependencies) -) - for _, class in self._components do - dependencies.componentProvider:addComponentClass(class) - end -end - -export type ComponentClassProvider = typeof(ComponentClassProvider) - -local function createComponentClassProvider(components: { types.AnyComponent }) - local provider = table.clone(ComponentClassProvider) - provider._components = components - return providers.create(provider) -end - -return createComponentClassProvider diff --git a/packages/rbx-components/extend-root/init.luau b/packages/rbx-components/extend-root/init.luau deleted file mode 100644 index 6e9f0578..00000000 --- a/packages/rbx-components/extend-root/init.luau +++ /dev/null @@ -1,30 +0,0 @@ -local ComponentProvider = require("./component-provider") -local createComponentClassProvider = require("@self/create-component-class-provider") -local logger = require("./logger") -local roots = require("../roots") -local types = require("./types") -local useComponent = require("@self/use-component") -local useComponents = require("@self/use-components") -local useModuleAsComponent = require("@self/use-module-as-component") -local useModulesAsComponents = require("@self/use-modules-as-components") - -local function extendRoot(root: types.RootPrivate): types.Root - if root._hasComponentExtensions then - return logger:fatalError({ template = logger.alreadyExtendedRoot }) - end - - root._hasComponentExtensions = true - root._classes = {} - - root:useProvider(ComponentProvider) - root:useProvider(createComponentClassProvider(root._classes)) - - root.useComponent = useComponent :: any - root.useComponents = useComponents :: any - root.useModuleAsComponent = useModuleAsComponent :: any - root.useModulesAsComponents = useModulesAsComponents :: any - - return root -end - -return extendRoot :: (root: roots.Root) -> types.Root diff --git a/packages/rbx-components/extend-root/use-component.luau b/packages/rbx-components/extend-root/use-component.luau deleted file mode 100644 index b0bd8d1f..00000000 --- a/packages/rbx-components/extend-root/use-component.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function useComponent(root: types.RootPrivate, component: types.AnyComponent) - table.insert(root._classes, component) - return root -end - -return useComponent diff --git a/packages/rbx-components/extend-root/use-components.luau b/packages/rbx-components/extend-root/use-components.luau deleted file mode 100644 index 809a4006..00000000 --- a/packages/rbx-components/extend-root/use-components.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local function useComponents(root: types.RootPrivate, components: { types.AnyComponent }) - for index = 1, #components do - table.insert(root._classes, components[index]) - end - return root -end - -return useComponents diff --git a/packages/rbx-components/extend-root/use-module-as-component.luau b/packages/rbx-components/extend-root/use-module-as-component.luau deleted file mode 100644 index 46724fe7..00000000 --- a/packages/rbx-components/extend-root/use-module-as-component.luau +++ /dev/null @@ -1,12 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModuleAsComponent(root: types.RootPrivate, module: ModuleScript) - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - return root -end - -return useModuleAsComponent diff --git a/packages/rbx-components/extend-root/use-modules-as-components.luau b/packages/rbx-components/extend-root/use-modules-as-components.luau deleted file mode 100644 index bababafa..00000000 --- a/packages/rbx-components/extend-root/use-modules-as-components.luau +++ /dev/null @@ -1,28 +0,0 @@ -local componentClasses = require("../component-classes") -local types = require("../types") - -local function useModulesAsComponents( - root: types.RootPrivate, - modules: { Instance }, - predicate: ((ModuleScript) -> boolean)? -) - for index = 1, #modules do - local module = modules[index] - - if not module:IsA("ModuleScript") then - continue - end - - if predicate and not predicate(module) then - continue - end - - local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end - end - return root -end - -return useModulesAsComponents diff --git a/packages/rbx-components/init.luau b/packages/rbx-components/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/packages/rbx-components/init.luau +++ /dev/null @@ -1,24 +0,0 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") - -export type Component = types.Component -export type Root = types.Root - -local components = { - create = create, - extendRoot = extendRoot, - _ = table.freeze({ - componentClasses = componentClasses, - }), -} - -local mt = {} - -function mt.__call(_, component: Self): types.Component - return create(component) -end - -table.freeze(mt) -return table.freeze(setmetatable(components, mt)) diff --git a/packages/rbx-components/logger.luau b/packages/rbx-components/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/packages/rbx-components/logger.luau +++ /dev/null @@ -1,8 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { - alreadyExtendedRoot = "Root already has component extension.", - invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", - alreadyRegisteredComponent = "Component already registered.", - multipleSameTag = "Multiple components use the CollectionService tag '%s', which is likely a mistake. Supress this warning with `_G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG = true`.", -}) diff --git a/packages/rbx-components/prvd.config.luau b/packages/rbx-components/prvd.config.luau deleted file mode 100644 index 7d6f179c..00000000 --- a/packages/rbx-components/prvd.config.luau +++ /dev/null @@ -1,15 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "rbx-components", - description = "Component functionality for Prvd 'M Wrong", - - unreleased = true, - - dependencies = configure.dependencies({ - logger = true, - roots = true, - providers = true, - dependencies = true, - }), -}) diff --git a/packages/rbx-components/types.luau b/packages/rbx-components/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/packages/rbx-components/types.luau +++ /dev/null @@ -1,30 +0,0 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") - -export type Component = dependencies.Dependency, - tag: string?, - instanceCheck: (unknown) -> boolean, - blacklistInstances: { Instance }?, - whitelistInstances: { Instance }?, - constructor: (self: Component, instance: Instance) -> ()?, - added: (self: Component) -> ()?, - removed: (self: Component) -> ()?, - destroyed: (self: Component) -> ()?, -}, nil, Instance> - -export type Root = roots.Root & { - useModuleAsComponent: (root: Root, module: ModuleScript) -> Root, - useModulesAsComponents: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useComponent: (root: Root, component: Component) -> Root, - useComponents: (root: Root, components: { Component }) -> Root, -} - -export type RootPrivate = Root & { - _hasComponentExtensions: true?, - _classes: { Component }, -} - -export type AnyComponent = Component - -return nil diff --git a/packages/rbx-lifecycles/index.d.ts b/packages/rbx-lifecycles/index.d.ts deleted file mode 100644 index 3ad36447..00000000 --- a/packages/rbx-lifecycles/index.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace RbxLifecycles { - export const RbxLifecycles: Provider<{ - preSimulation: Lifecycle<[dt: number]>; - postSimulation: Lifecycle<[dt: number]>; - preAnimation: Lifecycle<[dt: number]>; - preRender: Lifecycle<[dt: number]>; - playerAdded: Lifecycle<[player: Player]>; - playerRemoving: Lifecycle<[player: Player]>; - }>; - - export interface PreSimulation { - preSimulation(dt: number): void; - } - - export interface PostSimulation { - postSimulation(dt: number): void; - } - - export interface PreAnimation { - preAnimation(dt: number): void; - } - - export interface PreRender { - preRender(dt: number): void; - } - - export interface PlayerAdded { - playerAdded(player: Player): void; - } - - export interface PlayerRemoving { - playerRemoving(player: Player): void; - } -} - -export = RbxLifecycles; -export as namespace RbxLifecycles; diff --git a/packages/rbx-lifecycles/init.luau b/packages/rbx-lifecycles/init.luau deleted file mode 100644 index c1243680..00000000 --- a/packages/rbx-lifecycles/init.luau +++ /dev/null @@ -1,67 +0,0 @@ -local Players = game:GetService("Players") -local RunService = game:GetService("RunService") - -local prvd = require("./prvdmwrong") - -local fireConcurrent = prvd.fireConcurrent - -local RbxLifecycles = {} -RbxLifecycles.name = "@prvdmwrong/rbx-lifecycles" -RbxLifecycles.priority = -math.huge - -RbxLifecycles.preSimulation = prvd.lifecycle("preSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.postSimulation = prvd.lifecycle("postSimulation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preAnimation = prvd.lifecycle("preAnimation", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.preRender = prvd.lifecycle("preRender", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerAdded = prvd.lifecycle("playerAdded", fireConcurrent) :: prvd.Lifecycle -RbxLifecycles.playerRemoving = prvd.lifecycle("playerRemoving", fireConcurrent) :: prvd.Lifecycle - -local function wrapLifecycle(lifecycle: prvd.Lifecycle<...unknown>) - return function(...: unknown) - lifecycle:fire(...) - end -end - -function RbxLifecycles.constructor(self: RbxLifecycles) - self.connections = {} :: { RBXScriptConnection } - - self:_addConnections( - RunService.PreSimulation:Connect(wrapLifecycle(RbxLifecycles.preSimulation :: any)), - RunService.PostSimulation:Connect(wrapLifecycle(RbxLifecycles.postSimulation :: any)), - RunService.PreAnimation:Connect(wrapLifecycle(RbxLifecycles.preAnimation :: any)) - ) - - if RunService:IsClient() then - self:_addConnections(RunService.PreRender:Connect(wrapLifecycle(RbxLifecycles.preRender :: any))) - end - - self:_addConnections( - Players.PlayerAdded:Connect(wrapLifecycle(RbxLifecycles.playerAdded :: any)), - Players.PlayerRemoving:Connect(wrapLifecycle(RbxLifecycles.playerRemoving :: any)) - ) -end - -function RbxLifecycles.finish(self: RbxLifecycles) - for _, connection in self.connections do - if connection.Connected then - connection:Disconnect() - end - end - table.clear(self.connections) -end - -function RbxLifecycles._addConnections(self: RbxLifecycles, ...: RBXScriptConnection) - for index = 1, select("#", ...) do - table.insert(self.connections, select(index, ...) :: any) - end -end - --- Needed so typescript can require the provider as: --- --- ```ts --- import { RbxLifecycles } from "@rbxts/rbx-lifecycles" --- ``` -RbxLifecycles.RbxLifecycles = RbxLifecycles - -export type RbxLifecycles = typeof(RbxLifecycles) -return prvd(RbxLifecycles) diff --git a/packages/rbx-lifecycles/prvd.config.luau b/packages/rbx-lifecycles/prvd.config.luau deleted file mode 100644 index 5f590508..00000000 --- a/packages/rbx-lifecycles/prvd.config.luau +++ /dev/null @@ -1,14 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "rbx-lifecycles", - description = "Lifecycles implementations for Roblox", - - pesdeTargets = { - roblox = true, - }, - - dependencies = configure.dependencies({ - prvdmwrong = true, - }), -}) diff --git a/packages/roots/create.luau b/packages/roots/create.luau deleted file mode 100644 index 26c14f4e..00000000 --- a/packages/roots/create.luau +++ /dev/null @@ -1,47 +0,0 @@ -local destroy = require("./methods/destroy") -local lifecycles = require("../lifecycles") -local rootConstructing = require("./hooks/root-constructing") -local start = require("./methods/start") -local types = require("./types") -local useModule = require("./methods/use-module") -local useModules = require("./methods/use-modules") -local useProvider = require("./methods/use-provider") -local useProviders = require("./methods/use-providers") -local useRoot = require("./methods/use-root") -local useRoots = require("./methods/use-roots") -local willFinish = require("./methods/will-finish") -local willStart = require("./methods/will-start") - -local function create(): types.Root - local self: types.Self = { - type = "Root", - - start = start, - - useProvider = useProvider, - useProviders = useProviders, - useModule = useModule, - useModules = useModules, - useRoot = useRoot, - useRoots = useRoots, - destroy = destroy, - - willStart = willStart, - willFinish = willFinish, - - _destroyed = false, - _rootProviders = {}, - _rootLifecycles = {}, - _subRoots = {}, - _start = lifecycles.create("start", lifecycles.handlers.fireConcurrent), - _finish = lifecycles.create("destroy", lifecycles.handlers.fireSequential), - } :: any - - for _, callback in rootConstructing.callbacks do - callback(self) - end - - return self -end - -return create diff --git a/packages/roots/hooks/lifecycle-used.luau b/packages/roots/hooks/lifecycle-used.luau deleted file mode 100644 index bd29276a..00000000 --- a/packages/roots/hooks/lifecycle-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycles = require("../../lifecycles") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: lifecycles.Lifecycle) -> () } = {} - -local function onLifecycleUsed(listener: (root: types.Root, lifecycle: lifecycles.Lifecycle) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onLifecycleUsed = onLifecycleUsed, -}) diff --git a/packages/roots/hooks/provider-used.luau b/packages/roots/hooks/provider-used.luau deleted file mode 100644 index dac2573c..00000000 --- a/packages/roots/hooks/provider-used.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providers = require("../../providers") -local types = require("../types") - -local callbacks: { (root: types.Self, provider: providers.Provider) -> () } = {} - -local function onProviderUsed(listener: (root: types.Root, provider: providers.Provider) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onProviderUsed = onProviderUsed, -}) diff --git a/packages/roots/hooks/root-constructing.luau b/packages/roots/hooks/root-constructing.luau deleted file mode 100644 index 5fb8b819..00000000 --- a/packages/roots/hooks/root-constructing.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootConstructing(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootConstructing = onRootConstructing, -}) diff --git a/packages/roots/hooks/root-destroyed.luau b/packages/roots/hooks/root-destroyed.luau deleted file mode 100644 index 10b79b54..00000000 --- a/packages/roots/hooks/root-destroyed.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootDestroyed(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootDestroyed = onRootDestroyed, -}) diff --git a/packages/roots/hooks/root-finished.luau b/packages/roots/hooks/root-finished.luau deleted file mode 100644 index d3519cea..00000000 --- a/packages/roots/hooks/root-finished.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootFinished(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootFinished = onRootFinished, -}) diff --git a/packages/roots/hooks/root-started.luau b/packages/roots/hooks/root-started.luau deleted file mode 100644 index 2ae6f90c..00000000 --- a/packages/roots/hooks/root-started.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self) -> () } = {} - -local function onRootStarted(listener: (root: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootStarted = onRootStarted, -}) diff --git a/packages/roots/hooks/root-used.luau b/packages/roots/hooks/root-used.luau deleted file mode 100644 index 71f172cc..00000000 --- a/packages/roots/hooks/root-used.luau +++ /dev/null @@ -1,15 +0,0 @@ -local types = require("../types") - -local callbacks: { (root: types.Self, subRoot: types.Root) -> () } = {} - -local function onRootUsed(listener: (root: types.Root, subRoot: types.Root) -> ()): () -> () - table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end -end - -return table.freeze({ - callbacks = callbacks, - onRootUsed = onRootUsed, -}) diff --git a/packages/roots/index.d.ts b/packages/roots/index.d.ts deleted file mode 100644 index d8e100c5..00000000 --- a/packages/roots/index.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Lifecycle } from "../lifecycles"; -import { Provider } from "../providers"; - -declare namespace roots { - export type Root = { - type: "Root"; - - start(): StartedRoot; - - useModule(module: ModuleScript): Root; - useModules(modules: Instance[], predicate?: (module: ModuleScript) => boolean): Root; - useRoot(root: Root): Root; - useRoots(roots: Root[]): Root; - useProvider(provider: Provider): Root; - useProviders(providers: Provider[]): Root; - useLifecycle(lifecycle: Lifecycle): Root; - useLifecycles(lifecycles: Lifecycle): Root; - destroy(): void; - - willStart(callback: () => void): Root; - willFinish(callback: () => void): Root; - }; - - export type StartedRoot = { - type: "StartedRoot"; - - finish(): void; - }; - - export function create(): Root; - - export namespace hooks { - export function onLifecycleUsed(listener: (lifecycle: Lifecycle) => void): () => void; - export function onProviderUsed(listener: (provider: Provider) => void): () => void; - export function onRootUsed(listener: (root: Root, subRoot: Root) => void): () => void; - - export function onRootConstructing(listener: (root: Root) => void): () => void; - export function onRootStarted(listener: (root: Root) => void): () => void; - export function onRootFinished(listener: (root: Root) => void): () => void; - export function onRootDestroyed(listener: (root: Root) => void): () => void; - } -} - -export = roots; -export as namespace roots; diff --git a/packages/roots/init.luau b/packages/roots/init.luau deleted file mode 100644 index f6aa7495..00000000 --- a/packages/roots/init.luau +++ /dev/null @@ -1,28 +0,0 @@ -local create = require("@self/create") -local lifecycleUsed = require("@self/hooks/lifecycle-used") -local providerUsed = require("@self/hooks/provider-used") -local rootConstructing = require("@self/hooks/root-constructing") -local rootDestroyed = require("@self/hooks/root-destroyed") -local rootFinished = require("@self/hooks/root-finished") -local rootStarted = require("@self/hooks/root-started") -local rootUsed = require("@self/hooks/root-used") -local types = require("@self/types") - -export type Root = types.Root -export type StartedRoot = types.StartedRoot - -local roots = table.freeze({ - create = create, - hooks = table.freeze({ - onLifecycleUsed = lifecycleUsed.onLifecycleUsed, - onProviderUsed = providerUsed.onProviderUsed, - onRootUsed = rootUsed.onRootUsed, - - onRootConstructing = rootConstructing.onRootConstructing, - onRootStarted = rootStarted.onRootStarted, - onRootFinished = rootFinished.onRootFinished, - onRootDestroyed = rootDestroyed.onRootDestroyed, - }), -}) - -return roots diff --git a/packages/roots/logger.luau b/packages/roots/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/packages/roots/logger.luau +++ /dev/null @@ -1,7 +0,0 @@ -local logger = require("../logger") - -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { - useAfterDestroy = "Cannot use Root after it is destroyed.", - alreadyDestroyed = "Cannot destroy an already destroyed Root.", - alreadyFinished = "Root has already finished.", -}) diff --git a/packages/roots/methods/destroy.luau b/packages/roots/methods/destroy.luau deleted file mode 100644 index 0c62a935..00000000 --- a/packages/roots/methods/destroy.luau +++ /dev/null @@ -1,16 +0,0 @@ -local logger = require("../logger") -local types = require("../types") - -local function destroy(root: types.Self) - if root._destroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end - root._destroyed = true - table.clear(root._rootLifecycles) - table.clear(root._rootProviders) - table.clear(root._subRoots) - root._start:clear() - root._finish:clear() -end - -return destroy diff --git a/packages/roots/methods/start.luau b/packages/roots/methods/start.luau deleted file mode 100644 index 3f24dac5..00000000 --- a/packages/roots/methods/start.luau +++ /dev/null @@ -1,102 +0,0 @@ -local dependencies = require("../../dependencies") -local lifecycles = require("../../lifecycles") -local logger = require("../logger") -local providers = require("../../providers") -local rootFinished = require("../hooks/root-finished").callbacks -local rootStarted = require("../hooks/root-started").callbacks -local types = require("../types") - -local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: providers.Provider) - local lifecycleMethod = (provider :: any)[lifecycle.method] - if typeof(lifecycleMethod) == "function" then - -- local isProfiling = _G.PRVDMWRONG_PROFILE_LIFECYCLES - - -- if isProfiling then - -- lifecycle:register(function(...) - -- debug.profilebegin(memoryCategory) - -- debug.setmemorycategory(memoryCategory) - -- lifecycleMethod(provider, ...) - -- debug.resetmemorycategory() - -- debug.profileend() - -- end) - -- else - lifecycle:register(function(...) - lifecycleMethod(provider, ...) - end) - -- end - end -end - -local function nameOf(provider: providers.Provider, extension: string?): string - return if extension then `{tostring(provider)}.{extension}` else tostring(provider) -end - -local function start(root: types.Self): types.StartedRoot - local processed = dependencies.processDependencies(root._rootProviders) - local sortedProviders = processed.sortedDependencies :: { providers.Provider } - local processedLifecycles = processed.lifecycles - table.move(root._rootLifecycles, 1, #root._rootLifecycles, #processedLifecycles + 1, processedLifecycles) - - dependencies.sortByPriority(sortedProviders) - - local constructedProviders = {} - for _, provider in sortedProviders do - local providerDependencies = (provider :: any).dependencies - if typeof(providerDependencies) == "table" then - providerDependencies = table.clone(providerDependencies) - for key, value in providerDependencies do - providerDependencies[key] = constructedProviders[value] - end - end - - local constructed = provider.new(providerDependencies) - constructedProviders[provider] = constructed - bindLifecycle(root._start, constructed) - bindLifecycle(root._finish, constructed) - - for _, lifecycle in processedLifecycles do - bindLifecycle(lifecycle, constructed) - end - end - - local subRoots: { types.StartedRoot } = {} - for root in root._subRoots do - table.insert(subRoots, root:start()) - end - - root._start:fire() - - local startedRoot = {} :: types.StartedRoot - startedRoot.type = "StartedRoot" - - local didFinish = false - - function startedRoot:finish() - if didFinish then - return logger:fatalError({ template = logger.alreadyFinished }) - end - - didFinish = true - root._finish:fire() - - -- NOTE(znotfireman): Assume the user cleans up their own lifecycles - root._start:clear() - root._finish:clear() - - for _, subRoot in subRoots do - subRoot:finish() - end - - for _, hook in rootFinished do - hook(root) - end - end - - for _, hook in rootStarted do - hook(root) - end - - return startedRoot -end - -return start diff --git a/packages/roots/methods/use-lifecycle.luau b/packages/roots/methods/use-lifecycle.luau deleted file mode 100644 index 862c2d07..00000000 --- a/packages/roots/methods/use-lifecycle.luau +++ /dev/null @@ -1,14 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycle(root: types.Self, lifecycle: lifecycles.Lifecycle) - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - return root -end - -return useLifecycle diff --git a/packages/roots/methods/use-lifecycles.luau b/packages/roots/methods/use-lifecycles.luau deleted file mode 100644 index 3f12341f..00000000 --- a/packages/roots/methods/use-lifecycles.luau +++ /dev/null @@ -1,16 +0,0 @@ -local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useLifecycles(root: types.Self, lifecycles: { lifecycles.Lifecycle }) - for _, lifecycle in lifecycles do - table.insert(root._rootLifecycles, lifecycle) - threadpool.spawnCallbacks(lifecycleUsed, root, lifecycle) - end - return root -end - -return useLifecycles diff --git a/packages/roots/methods/use-module.luau b/packages/roots/methods/use-module.luau deleted file mode 100644 index a96b3d17..00000000 --- a/packages/roots/methods/use-module.luau +++ /dev/null @@ -1,23 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModule(root: types.Self, module: ModuleScript) - local moduleExport = (require)(module) - - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - - return root -end - -return useModule diff --git a/packages/roots/methods/use-modules.luau b/packages/roots/methods/use-modules.luau deleted file mode 100644 index 8354a9d0..00000000 --- a/packages/roots/methods/use-modules.luau +++ /dev/null @@ -1,28 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool -local providerClasses = providers._.providerClasses - -local function useModules(root: types.Self, modules: { Instance }, predicate: ((module: ModuleScript) -> boolean)?) - for _, module in modules do - if not module:IsA("ModuleScript") or predicate and not predicate(module) then - continue - end - - local moduleExport = (require)(module) - if providerClasses[moduleExport] then - root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end - threadpool.spawnCallbacks(providerUsed, root, moduleExport) - end - end - - return root -end - -return useModules diff --git a/packages/roots/methods/use-provider.luau b/packages/roots/methods/use-provider.luau deleted file mode 100644 index 277d8049..00000000 --- a/packages/roots/methods/use-provider.luau +++ /dev/null @@ -1,14 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProvider(root: types.Self, provider: providers.Provider) - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - return root -end - -return useProvider diff --git a/packages/roots/methods/use-providers.luau b/packages/roots/methods/use-providers.luau deleted file mode 100644 index 1489c3a3..00000000 --- a/packages/roots/methods/use-providers.luau +++ /dev/null @@ -1,16 +0,0 @@ -local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useProviders(root: types.Self, providers: { providers.Provider }) - for _, provider in providers do - root._rootProviders[provider] = true - threadpool.spawnCallbacks(providerUsed, root, provider) - end - return root -end - -return useProviders diff --git a/packages/roots/methods/use-root.luau b/packages/roots/methods/use-root.luau deleted file mode 100644 index efc4ad1e..00000000 --- a/packages/roots/methods/use-root.luau +++ /dev/null @@ -1,13 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoot(root: types.Self, subRoot: types.Root) - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - return root -end - -return useRoot diff --git a/packages/roots/methods/use-roots.luau b/packages/roots/methods/use-roots.luau deleted file mode 100644 index 7b5b9dda..00000000 --- a/packages/roots/methods/use-roots.luau +++ /dev/null @@ -1,15 +0,0 @@ -local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") - -local threadpool = runtime.threadpool - -local function useRoots(root: types.Self, subRoots: { types.Root }) - for _, subRoot in subRoots do - root._subRoots[subRoot] = true - threadpool.spawnCallbacks(rootUsed, root, subRoot) - end - return root -end - -return useRoots diff --git a/packages/roots/methods/will-finish.luau b/packages/roots/methods/will-finish.luau deleted file mode 100644 index 893088f4..00000000 --- a/packages/roots/methods/will-finish.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willFinish(root: types.Self, callback: () -> ()) - root._finish:register(callback) - return root -end - -return willFinish diff --git a/packages/roots/methods/will-start.luau b/packages/roots/methods/will-start.luau deleted file mode 100644 index 7c3d88c3..00000000 --- a/packages/roots/methods/will-start.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -local function willStart(root: types.Self, callback: () -> ()) - root._start:register(callback) - return root -end - -return willStart diff --git a/packages/roots/prvd.config.luau b/packages/roots/prvd.config.luau deleted file mode 100644 index 9391d60d..00000000 --- a/packages/roots/prvd.config.luau +++ /dev/null @@ -1,19 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "roots", - description = "Roots implementation for Prvd 'M Wrong", - - types = { - Root = true, - StartedRoot = true, - }, - - dependencies = configure.dependencies({ - dependencies = true, - logger = true, - lifecycles = true, - runtime = true, - providers = true, - }), -}) diff --git a/packages/roots/types.luau b/packages/roots/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/packages/roots/types.luau +++ /dev/null @@ -1,40 +0,0 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") - -type Set = { [T]: true } - -export type Root = { - type: "Root", - - start: (root: Root) -> StartedRoot, - - useModule: (root: Root, module: ModuleScript) -> Root, - useModules: (root: Root, modules: { Instance }, predicate: ((ModuleScript) -> boolean)?) -> Root, - useRoot: (root: Root, root: Root) -> Root, - useRoots: (root: Root, roots: { Root }) -> Root, - useProvider: (root: Root, provider: providers.Provider) -> Root, - useProviders: (root: Root, providers: { providers.Provider }) -> Root, - useLifecycle: (root: Root, lifecycle: lifecycles.Lifecycle) -> Root, - useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, - destroy: (root: Root) -> (), - - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, -} - -export type StartedRoot = { - type: "StartedRoot", - - finish: (root: StartedRoot) -> (), -} - -export type Self = Root & { - _destroyed: boolean, - _rootProviders: Set>, - _rootLifecycles: { lifecycles.Lifecycle }, - _subRoots: Set, - _start: lifecycles.Lifecycle<()>, - _finish: lifecycles.Lifecycle<()>, -} - -return nil diff --git a/packages/runtime/batteries/threadpool.luau b/packages/runtime/batteries/threadpool.luau deleted file mode 100644 index 6caf08b4..00000000 --- a/packages/runtime/batteries/threadpool.luau +++ /dev/null @@ -1,38 +0,0 @@ -local task = require("../libs/task") - -local freeThreads: { thread } = {} - -local function run(f: (T...) -> (), thread: thread, ...) - f(...) - table.insert(freeThreads, thread) -end - -local function yielder() - while true do - run(coroutine.yield()) - end -end - -local function spawn(f: (T...) -> (), ...: T...) - local thread - if #freeThreads > 0 then - thread = freeThreads[#freeThreads] - freeThreads[#freeThreads] = nil - else - thread = coroutine.create(yielder) - coroutine.resume(thread) - end - - task.spawn(thread, f, thread, ...) -end - -local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args...) - for _, callback in callbacks do - spawn(callback, ...) - end -end - -return table.freeze({ - spawn = spawn, - spawnCallbacks = spawnCallbacks, -}) diff --git a/packages/runtime/implementations/init.luau b/packages/runtime/implementations/init.luau deleted file mode 100644 index 28dbe015..00000000 --- a/packages/runtime/implementations/init.luau +++ /dev/null @@ -1,56 +0,0 @@ -local types = require("@self/../types") - -type Implementation = { new: (() -> T)?, implementation: T? } - -export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune" - -local supportedRuntimes = table.freeze({ - roblox = require("@self/roblox"), - luau = require("@self/luau"), - lune = require("@self/lune"), - lute = require("@self/lute"), - seal = require("@self/seal"), - zune = require("@self/zune"), -}) - -local currentRuntime: types.Runtime = nil -do - for _, runtime in supportedRuntimes :: { [string]: types.Runtime } do - local isRuntime = runtime.is() - if isRuntime then - local currentRuntimePriority = currentRuntime and currentRuntime.priority or 0 - local runtimePriority = runtime.priority or 0 - if currentRuntimePriority <= runtimePriority then - currentRuntime = runtime - end - end - end - assert(currentRuntime, "No supported runtime") -end - -local currentRuntimeName: RuntimeName = currentRuntime.name :: any - -local function notImplemented(functionName: string) - return function() - error(`'{functionName}' is not implemented by runtime '{currentRuntimeName}'`, 2) - end -end - -local function implementFunction(label: string, implementations: { [types.Runtime]: Implementation? }): T - local implementation = implementations[currentRuntime] - if implementation then - if implementation.new then - return implementation.new() - elseif implementation.implementation then - return implementation.implementation - end - end - return notImplemented(label) :: any -end - -return table.freeze({ - supportedRuntimes = supportedRuntimes, - currentRuntime = currentRuntime, - currentRuntimeName = currentRuntimeName, - implementFunction = implementFunction, -}) diff --git a/packages/runtime/implementations/init.spec.luau b/packages/runtime/implementations/init.spec.luau deleted file mode 100644 index 3ce91cbb..00000000 --- a/packages/runtime/implementations/init.spec.luau +++ /dev/null @@ -1,81 +0,0 @@ -local implementations = require("@self/../implementations") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("currentRuntime", function() - test("detects lune runtime", function() - expect(implementations.currentRuntimeName).is("lune") - expect(implementations.currentRuntime).is(implementations.supportedRuntimes.lune) - end) - end) - - describe("implementFunction", function() - test("implements for lune runtime", function() - local lune = function() end - local luau = function() end - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - implementation = lune, - }, - [implementations.supportedRuntimes.luau] = { - implementation = luau, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - end) - - test("constructs for lune runtime", function() - local lune = function() end - local luau = function() end - - local constructedLune = false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.lune] = { - new = function() - constructedLune = true - return lune - end, - }, - [implementations.supportedRuntimes.luau] = { - new = function() - return luau - end, - }, - }) - - expect(implementation).is_a("function") - expect(implementation).never_is(luau) - expect(implementation).is(lune) - expect(constructedLune).is_true() - end) - - test("defaults to not implemented function", function() - local constructSuccess, runSuccess = false, false - - local implementation = implementations.implementFunction("implementation", { - [implementations.supportedRuntimes.roblox] = { - new = function() - constructSuccess = true - return function() - runSuccess = true - end - end, - }, - }) - - expect(constructSuccess).is(false) - expect(implementation).is_a("function") - expect(implementation).fails_with("'implementation' is not implemented by runtime 'lune'") - expect(runSuccess).is(false) - end) - end) -end diff --git a/packages/runtime/implementations/luau.luau b/packages/runtime/implementations/luau.luau deleted file mode 100644 index c67e52f4..00000000 --- a/packages/runtime/implementations/luau.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "luau", - priority = -1, - is = function() - return true - end, -}) diff --git a/packages/runtime/implementations/lune.luau b/packages/runtime/implementations/lune.luau deleted file mode 100644 index f49834eb..00000000 --- a/packages/runtime/implementations/lune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local LUNE_VERSION_FORMAT = "(Lune) (%d+%.%d+%.%d+.*)+(%d+)" - -return types.Runtime({ - name = "lune", - is = function() - return string.match(_VERSION, LUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/packages/runtime/implementations/lute.luau b/packages/runtime/implementations/lute.luau deleted file mode 100644 index 7b6abc58..00000000 --- a/packages/runtime/implementations/lute.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "lute", - is = function() - return false - end, -}) diff --git a/packages/runtime/implementations/roblox.luau b/packages/runtime/implementations/roblox.luau deleted file mode 100644 index 91a780e2..00000000 --- a/packages/runtime/implementations/roblox.luau +++ /dev/null @@ -1,9 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "roblox", - is = function() - -- wtf - return not not (_VERSION == "Luau" and game and workspace) - end, -}) diff --git a/packages/runtime/implementations/seal.luau b/packages/runtime/implementations/seal.luau deleted file mode 100644 index 0a72684c..00000000 --- a/packages/runtime/implementations/seal.luau +++ /dev/null @@ -1,8 +0,0 @@ -local types = require("../types") - -return types.Runtime({ - name = "seal", - is = function() - return false - end, -}) diff --git a/packages/runtime/implementations/zune.luau b/packages/runtime/implementations/zune.luau deleted file mode 100644 index 48243e05..00000000 --- a/packages/runtime/implementations/zune.luau +++ /dev/null @@ -1,10 +0,0 @@ -local types = require("../types") - -local ZUNE_VERSION_FORMAT = "(Zune) (%d+%.%d+%.%d+.*)+(%d+%.%d+)" - -return types.Runtime({ - name = "zune", - is = function() - return string.match(_VERSION, ZUNE_VERSION_FORMAT) ~= nil - end, -}) diff --git a/packages/runtime/index.d.ts b/packages/runtime/index.d.ts deleted file mode 100644 index b227b952..00000000 --- a/packages/runtime/index.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -declare namespace runtime { - export type RuntimeName = "roblox" | "luau" | "lune" | "lute" | "seal" | "zune"; - - export const name: RuntimeName; - - export namespace task { - export function cancel(thread: thread): void; - - export function defer(functionOrThread: (...args: T) => void, ...args: T): thread; - export function defer(functionOrThread: thread): thread; - export function defer( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function delay( - duration: number, - functionOrThread: (...args: T) => void, - ...args: T - ): thread; - export function delay(duration: number, functionOrThread: thread): thread; - export function delay( - duration: number, - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function spawn(functionOrThread: (...args: T) => void, ...args: T): thread; - export function spawn(functionOrThread: thread): thread; - export function spawn( - functionOrThread: thread | ((...args: T) => void), - ...args: T - ): thread; - - export function wait(duration: number): number; - } - - export function warn(...args: T): void; - - export namespace threadpool { - export function spawn(f: (...args: T) => void, ...args: T): void; - export function spawnCallbacks(functions: ((...args: T) => void)[], ...args: T): void; - } -} - -export = runtime; -export as namespace runtime; diff --git a/packages/runtime/init.luau b/packages/runtime/init.luau deleted file mode 100644 index 26bdeee0..00000000 --- a/packages/runtime/init.luau +++ /dev/null @@ -1,15 +0,0 @@ -local implementations = require("@self/implementations") -local task = require("@self/libs/task") -local threadpool = require("@self/batteries/threadpool") -local warn = require("@self/libs/warn") - -export type RuntimeName = implementations.RuntimeName - -return table.freeze({ - name = implementations.currentRuntimeName, - - task = task, - warn = warn, - - threadpool = threadpool, -}) diff --git a/packages/runtime/libs/task.luau b/packages/runtime/libs/task.luau deleted file mode 100644 index 28c1ac9e..00000000 --- a/packages/runtime/libs/task.luau +++ /dev/null @@ -1,157 +0,0 @@ -local implementations = require("../implementations") - -export type TaskLib = { - cancel: (thread) -> (), - defer: (functionOrThread: thread | (T...) -> (), T...) -> thread, - delay: (duration: number, functionOrThread: thread | (T...) -> (), T...) -> thread, - spawn: (functionOrThread: thread | (T...) -> (), T...) -> thread, - wait: (duration: number?) -> number, -} - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function defaultSpawn(functionOrThread: thread | (T...) -> (), ...: T...): thread - if type(functionOrThread) == "thread" then - coroutine.resume(functionOrThread, ...) - return functionOrThread - else - local thread = coroutine.create(functionOrThread) - coroutine.resume(thread, ...) - return thread - end -end - -local function defaultWait(seconds: number?) - local startTime = os.clock() - local endTime = startTime + (seconds or 1) - local clockTime: number - repeat - clockTime = os.clock() - until clockTime >= endTime - return clockTime - startTime -end - -local task: TaskLib = table.freeze({ - cancel = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.cancel - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").cancel - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").cancel - end, - }, - [supportedRuntimes.luau] = { - implementation = function(thread) - if not coroutine.close(thread) then - error(debug.traceback(thread, "Could not cancel thread")) - end - end, - }, - }), - defer = implementFunction("task.defer", { - [supportedRuntimes.roblox] = { - new = function() - return task.defer :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").defer - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").defer - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - delay = implementFunction("task.delay", { - [supportedRuntimes.roblox] = { - new = function() - return task.delay :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").delay - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").delay - end, - }, - [supportedRuntimes.luau] = { - implementation = function(duration: number, functionOrThread: thread | (T...) -> (), ...: T...): thread - return defaultSpawn( - if typeof(functionOrThread) == "function" - then function(duration, functionOrThread, ...) - defaultWait(duration) - functionOrThread(...) - end - else function(duration, functionOrThread, ...) - defaultWait(duration) - coroutine.resume(...) - end, - duration, - functionOrThread, - ... - ) - end, - }, - }), - spawn = implementFunction("task.spawn", { - [supportedRuntimes.roblox] = { - new = function() - return task.spawn :: any - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").spawn - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").spawn - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultSpawn, - }, - }), - wait = implementFunction("task.wait", { - [supportedRuntimes.roblox] = { - new = function() - return task.wait - end, - }, - [supportedRuntimes.lune] = { - new = function() - return require("@lune/task").wait - end, - }, - [supportedRuntimes.zune] = { - new = function() - return require("@zcore/task").wait - end, - }, - [supportedRuntimes.luau] = { - implementation = defaultWait, - }, - }), -}) - -return task diff --git a/packages/runtime/libs/task.spec.luau b/packages/runtime/libs/task.spec.luau deleted file mode 100644 index 0918e87f..00000000 --- a/packages/runtime/libs/task.spec.luau +++ /dev/null @@ -1,62 +0,0 @@ -local luneTask = require("@lune/task") -local task = require("./task") -local tiniest = require("@lune-lib/tiniest/tiniest_for_lune") - --- FIXME: can't async stuff lol -return function(tiniest: tiniest.Configured): () - local test = tiniest.test - local expect = tiniest.expect - local describe = tiniest.describe - - describe("task", function() - test("spawn", function() - expect(task.spawn).is(luneTask.spawn) - local spawned = false - - task.spawn(function() - spawned = true - end) - - expect(spawned).is_true() - end) - - test("defer", function() - expect(task.defer).is(luneTask.defer) - - -- local spawned = false - - -- task.defer(function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - end) - - test("delay", function() - expect(task.delay).is(luneTask.delay) - -- local spawned = false - - -- task.delay(0.25, function() - -- spawned = true - -- end) - - -- expect(spawned).never_is_true() - - -- local startTime = os.clock() - -- repeat - -- until os.clock() - startTime > 0.5 - - -- print(spawned) - - -- expect(spawned).is_true() - end) - - test("wait", function() - expect(task.wait).is(luneTask.wait) - end) - - test("cancel", function() - expect(task.cancel).is(luneTask.cancel) - end) - end) -end diff --git a/packages/runtime/libs/warn.luau b/packages/runtime/libs/warn.luau deleted file mode 100644 index 6a4837ac..00000000 --- a/packages/runtime/libs/warn.luau +++ /dev/null @@ -1,27 +0,0 @@ -local implementations = require("../implementations") - -local supportedRuntimes = implementations.supportedRuntimes -local implementFunction = implementations.implementFunction - -local function tostringTuple(...: any) - local stringified = {} - for index = 1, select("#", ...) do - table.insert(stringified, tostring(select(index, ...))) - end - return table.concat(stringified, " ") -end - -local warn: (T...) -> () = implementFunction("warn", { - [supportedRuntimes.roblox] = { - new = function() - return warn - end, - }, - [supportedRuntimes.luau] = { - implementation = function(...: T...) - print(`\27[0;33m{tostringTuple(...)}\27[0m`) - end, - }, -}) - -return warn diff --git a/packages/runtime/prvd.config.luau b/packages/runtime/prvd.config.luau deleted file mode 100644 index b171ea71..00000000 --- a/packages/runtime/prvd.config.luau +++ /dev/null @@ -1,10 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "runtime", - description = "Runtime agnostic libraries for Prvd 'M Wrong", - - types = { - RuntimeName = true, - }, -}) diff --git a/packages/runtime/types.luau b/packages/runtime/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/packages/runtime/types.luau +++ /dev/null @@ -1,13 +0,0 @@ -export type Runtime = { - name: string, - priority: number?, - is: () -> boolean, -} - -local function Runtime(x: Runtime) - return table.freeze(x) -end - -return table.freeze({ - Runtime = Runtime, -}) diff --git a/packages/typecheckers/init.luau b/packages/typecheckers/init.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/typecheckers/prvd.config.luau b/packages/typecheckers/prvd.config.luau deleted file mode 100644 index 00a3fba7..00000000 --- a/packages/typecheckers/prvd.config.luau +++ /dev/null @@ -1,6 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.package({ - name = "typecheckers", - description = "Typechecking primitives and compatibility for Prvd 'M Wrong", -}) diff --git a/pesde.toml b/pesde.toml deleted file mode 100644 index ad6b2d51..00000000 --- a/pesde.toml +++ /dev/null @@ -1,8 +0,0 @@ -name = "prvdmwrong/repo" -version = "0.0.0" -private = true - -workspace_members = ["dist/pesde/roblox/*"] - -[target] - environment = "luau" diff --git a/providers/create.luau b/providers/create.luau new file mode 100644 index 00000000..592cb798 --- /dev/null +++ b/providers/create.luau @@ -0,0 +1,27 @@ +local nameOf = require "./name-of" +local providerClasses = require "./provider-classes" +local types = require "./types" + +local PROVIDER_MT = { __tostring = nameOf } + +local function createProvider(self: Self): types.Provider + local provider: types.Provider = self :: any + setmetatable(provider, PROVIDER_MT) + + if provider.__index == nil then provider.__index = provider end + + if provider.__tostring == nil then provider.__tostring = nameOf end + + if provider.new == nil then + function provider.new(dependencies) + local self: types.Provider = setmetatable({}, provider) :: any + if provider.constructor then return provider.constructor(self, dependencies) or self end + return self + end + end + + providerClasses[provider] = true + return provider +end + +return createProvider diff --git a/providers/init.luau b/providers/init.luau new file mode 100644 index 00000000..4c7d7381 --- /dev/null +++ b/providers/init.luau @@ -0,0 +1,16 @@ +local create = require "@self/create" +local nameOf = require "@self/name-of" +local providerClasses = require "@self/provider-classes" +local types = require "@self/types" + +export type Provider = types.Provider + +local providers = table.freeze { + create = create, + nameOf = nameOf, + _ = table.freeze { + providerClasses = providerClasses, + }, +} + +return providers diff --git a/providers/name-of.luau b/providers/name-of.luau new file mode 100644 index 00000000..41a5437d --- /dev/null +++ b/providers/name-of.luau @@ -0,0 +1,5 @@ +local types = require "./types" + +local function nameOf(provider: types.Provider) return provider.name or "Provider" end + +return nameOf diff --git a/dist/npm/providers/src/provider-classes.luau b/providers/provider-classes.luau similarity index 81% rename from dist/npm/providers/src/provider-classes.luau rename to providers/provider-classes.luau index cc57922f..95f9b2c7 100644 --- a/dist/npm/providers/src/provider-classes.luau +++ b/providers/provider-classes.luau @@ -1,4 +1,4 @@ -local types = require("./types") +local types = require "./types" type Set = { [T]: true } diff --git a/dist/npm/providers/src/types.luau b/providers/types.luau similarity index 66% rename from dist/npm/providers/src/types.luau rename to providers/types.luau index 4f4d4dc9..859d6568 100644 --- a/dist/npm/providers/src/types.luau +++ b/providers/types.luau @@ -1,12 +1,12 @@ -local dependencies = require("../dependencies") +local dependencies = require "../dependencies" export type Provider = dependencies.Dependency, __tostring: (self: Provider) -> string, name: string?, constructor: ((self: Provider, dependencies: Dependencies) -> ())?, - start: (self: Provider) -> ()?, - destroy: (self: Provider) -> ()?, + onStart: (self: Provider) -> ()?, + onFinish: (self: Provider) -> ()?, }, Dependencies> return nil diff --git a/prvd.config.luau b/prvd.config.luau deleted file mode 100644 index 9282af01..00000000 --- a/prvd.config.luau +++ /dev/null @@ -1,17 +0,0 @@ -local configure = require("@lune-lib/configure") - -return configure.root({ - repository = "https://github.com/prvdmwrong/prvdmwrong", - homepage = "https://prvdmwrong.luau.page/latest/", - packageDir = "packages", - defaults = { - authors = { "Fire " }, - license = "MPL-2.0", - version = "0.2.0-rc.4", - }, - publishers = { - pesde = configure.publisher({ scope = "prvdmwrong", registry = "https://github.com/pesde-pkg/index" }), - wally = configure.publisher({ scope = "prvdmwrong", registry = "https://github.com/upliftgames/wally-index" }), - npm = configure.publisher({ scope = "prvdmwrong", registry = "" }), - }, -}) diff --git a/dist/pesde/lune/prvdmwrong/src/init.luau b/prvdmwrong/init.luau similarity index 79% rename from dist/pesde/lune/prvdmwrong/src/init.luau rename to prvdmwrong/init.luau index 1381801d..c2193a66 100644 --- a/dist/pesde/lune/prvdmwrong/src/init.luau +++ b/prvdmwrong/init.luau @@ -1,10 +1,10 @@ -local dependencies = require("./dependencies") -local lifecycles = require("./lifecycles") -local providers = require("./providers") -local roots = require("./roots") +local dependencies = require "./dependencies" +local lifecycles = require "./lifecycles" +local providers = require "./providers" +local roots = require "./roots" export type Provider = providers.Provider -export type Lifecycle = lifecycles.Lifecycle +export type Lifecycle = lifecycles.Lifecycle export type Root = roots.Root export type StartedRoot = roots.StartedRoot @@ -18,7 +18,7 @@ local prvd = { fireConcurrent = lifecycles.handlers.fireConcurrent, fireSequential = lifecycles.handlers.fireSequential, - hooks = table.freeze({ + hooks = table.freeze { onProviderUsed = roots.hooks.onProviderUsed, onLifecycleUsed = roots.hooks.onLifecycleUsed, onRootConstructing = roots.hooks.onRootConstructing, @@ -31,15 +31,13 @@ local prvd = { onLifecycleDestroyed = lifecycles.hooks.onLifecycleDestroyed, onLifecycleRegistered = lifecycles.hooks.onLifecycleRegistered, onLifecycleUnregistered = lifecycles.hooks.onLifecycleUnregistered, - }), + }, } type PrvdModule = ((provider: Self) -> Provider) & typeof(prvd) local mt = {} -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end +function mt.__call(_, provider: Self): providers.Provider return providers.create(provider) :: any end local module: PrvdModule = setmetatable(prvd, mt) :: any return module diff --git a/dist/pesde/lune/rbx-components/src/component-classes.luau b/rbx-components/component-classes.luau similarity index 81% rename from dist/pesde/lune/rbx-components/src/component-classes.luau rename to rbx-components/component-classes.luau index 0dcdb30a..d5b2af6c 100644 --- a/dist/pesde/lune/rbx-components/src/component-classes.luau +++ b/rbx-components/component-classes.luau @@ -1,4 +1,4 @@ -local types = require("./types") +local types = require "./types" type Set = { [T]: true } diff --git a/dist/pesde/roblox/rbx-components/src/component-provider.luau b/rbx-components/component-provider.luau similarity index 80% rename from dist/pesde/roblox/rbx-components/src/component-provider.luau rename to rbx-components/component-provider.luau index 85af0d0d..a389caa8 100644 --- a/dist/pesde/roblox/rbx-components/src/component-provider.luau +++ b/rbx-components/component-provider.luau @@ -1,10 +1,10 @@ -local CollectionService = game:GetService("CollectionService") +local CollectionService = game:GetService "CollectionService" -local componentClasses = require("./component-classes") -local logger = require("./logger") -local providers = require("../providers") -local runtime = require("../runtime") -local types = require("./types") +local componentClasses = require "./component-classes" +local logger = require "./logger" +local providers = require "../providers" +local runtime = require "../runtime" +local types = require "./types" local threadpool = runtime.threadpool @@ -52,17 +52,13 @@ function ComponentProvider.start(self: ComponentProvider) self.constructedToClass[component :: any] = componentClass end - if component.added then - component:added() - end + if component.added then component:added() end end if not self._destroyingConnections[instance] then self._destroyingConnections[instance] = instance.Destroying:Once(function() for _, component in instanceToComponents do - if component.destroy then - threadpool.spawn(component.destroy, component) - end + if component.destroy then threadpool.spawn(component.destroy, component) end end table.clear(instanceToComponents) self.instanceToComponents[instance] = nil @@ -82,9 +78,7 @@ end function ComponentProvider.destroy(self: ComponentProvider) for _, components in self.instanceToComponents do for _, component in components do - if component.destroy then - component:destroy() - end + if component.destroy then component:destroy() end end table.clear(components) end @@ -96,15 +90,11 @@ function ComponentProvider.destroy(self: ComponentProvider) table.clear(self.constructedToClass) for _, connection in self._connections do - if connection.Connected then - connection:Disconnect() - end + if connection.Connected then connection:Disconnect() end end for _, connection in self._destroyingConnections do - if connection.Connected then - connection:Disconnect() - end + if connection.Connected then connection:Disconnect() end end table.clear(self._connections) @@ -112,20 +102,16 @@ function ComponentProvider.destroy(self: ComponentProvider) end function ComponentProvider.addComponentClass(self: ComponentProvider, class: types.AnyComponent) - if not componentClasses[class] then - logger:fatalError({ template = logger.invalidComponent }) - end + if not componentClasses[class] then logger:fatalError { template = logger.invalidComponent } end - if self.componentClasses[class] then - logger:fatalError({ template = logger.alreadyRegisteredComponent }) - end + if self.componentClasses[class] then logger:fatalError { template = logger.alreadyRegisteredComponent } end if class.tag then local tagToComponentClasses = self.tagToComponentClasses[class.tag] if tagToComponentClasses then if not _G.PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG and #tagToComponentClasses > 0 then - logger:warn({ template = logger.multipleSameTag, class.tag }) + logger:warn { template = logger.multipleSameTag, class.tag } end else tagToComponentClasses = {} @@ -154,9 +140,7 @@ function ComponentProvider.getAllComponents( local result = {} for _, components in self.instanceToComponents do for _, component in components do - if self.constructedToClass[component] == class then - result[component] = true - end + if self.constructedToClass[component] == class then result[component] = true end end end return result :: any @@ -167,7 +151,7 @@ function ComponentProvider.addComponent( class: types.Component, instance: I ): types.Component? - error("not yet implemented") + error "not yet implemented" end function ComponentProvider.removeComponent(self: ComponentProvider, class: types.Component, instance: I) @@ -175,9 +159,7 @@ function ComponentProvider.removeComponent(self: ComponentProvider, class: if constructed then self.instanceToComponents[instance :: any][class] = nil - if constructed.removed then - threadpool.spawn(constructed.removed :: any, constructed, instance) - end + if constructed.removed then threadpool.spawn(constructed.removed :: any, constructed, instance) end end end diff --git a/dist/pesde/lune/rbx-components/src/create.luau b/rbx-components/create.luau similarity index 62% rename from dist/pesde/lune/rbx-components/src/create.luau rename to rbx-components/create.luau index 24d39a3b..f19a5ff3 100644 --- a/dist/pesde/lune/rbx-components/src/create.luau +++ b/rbx-components/create.luau @@ -1,22 +1,18 @@ -local componentClasses = require("./component-classes") -local types = require("./types") +local componentClasses = require "./component-classes" +local types = require "./types" -- TODO: prvdmwrong/classes package? local function create(self: Self): types.Component local component: types.Component = self :: any - if component.__index == nil then - component.__index = component - end + if component.__index == nil then component.__index = component end -- TODO: abstract nameOf if component.new == nil then function component.new(instance: any) local self: types.Component = setmetatable({}, component) :: any - if component.constructor then - return component.constructor(self, instance) or self - end + if component.constructor then return component.constructor(self, instance) or self end return self end end diff --git a/dist/pesde/lune/rbx-components/src/extend-root/create-component-class-provider.luau b/rbx-components/extend-root/create-component-class-provider.luau similarity index 80% rename from dist/pesde/lune/rbx-components/src/extend-root/create-component-class-provider.luau rename to rbx-components/extend-root/create-component-class-provider.luau index 9d5ae999..e56a8c7a 100644 --- a/dist/pesde/lune/rbx-components/src/extend-root/create-component-class-provider.luau +++ b/rbx-components/extend-root/create-component-class-provider.luau @@ -1,13 +1,13 @@ -local ComponentProvider = require("../component-provider") -local providers = require("../../providers") -local types = require("../types") +local ComponentProvider = require "../component-provider" +local providers = require "../../providers" +local types = require "../types" local ComponentClassProvider = {} ComponentClassProvider.priority = -math.huge ComponentClassProvider.name = "@rbx-components.ComponentClassProvider" -ComponentClassProvider.dependencies = table.freeze({ +ComponentClassProvider.dependencies = table.freeze { componentProvider = ComponentProvider, -}) +} ComponentClassProvider._components = {} :: { types.AnyComponent } diff --git a/rbx-components/extend-root/init.luau b/rbx-components/extend-root/init.luau new file mode 100644 index 00000000..38ebbd7d --- /dev/null +++ b/rbx-components/extend-root/init.luau @@ -0,0 +1,28 @@ +local ComponentProvider = require "./component-provider" +local createComponentClassProvider = require "@self/create-component-class-provider" +local logger = require "./logger" +local roots = require "../roots" +local types = require "./types" +local useComponent = require "@self/use-component" +local useComponents = require "@self/use-components" +local useModuleAsComponent = require "@self/use-module-as-component" +local useModulesAsComponents = require "@self/use-modules-as-components" + +local function extendRoot(root: types.RootPrivate): types.Root + if root._hasComponentExtensions then return logger:fatalError { template = logger.alreadyExtendedRoot } end + + root._hasComponentExtensions = true + root._classes = {} + + root:useProvider(ComponentProvider) + root:useProvider(createComponentClassProvider(root._classes)) + + root.useComponent = useComponent :: any + root.useComponents = useComponents :: any + root.useModuleAsComponent = useModuleAsComponent :: any + root.useModulesAsComponents = useModulesAsComponents :: any + + return root +end + +return extendRoot :: (root: roots.Root) -> types.Root diff --git a/dist/pesde/lune/rbx-components/src/extend-root/use-component.luau b/rbx-components/extend-root/use-component.luau similarity index 82% rename from dist/pesde/lune/rbx-components/src/extend-root/use-component.luau rename to rbx-components/extend-root/use-component.luau index b0bd8d1f..e68c8a06 100644 --- a/dist/pesde/lune/rbx-components/src/extend-root/use-component.luau +++ b/rbx-components/extend-root/use-component.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local function useComponent(root: types.RootPrivate, component: types.AnyComponent) table.insert(root._classes, component) diff --git a/dist/pesde/lune/rbx-components/src/extend-root/use-components.luau b/rbx-components/extend-root/use-components.luau similarity index 86% rename from dist/pesde/lune/rbx-components/src/extend-root/use-components.luau rename to rbx-components/extend-root/use-components.luau index 809a4006..0e56b047 100644 --- a/dist/pesde/lune/rbx-components/src/extend-root/use-components.luau +++ b/rbx-components/extend-root/use-components.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local function useComponents(root: types.RootPrivate, components: { types.AnyComponent }) for index = 1, #components do diff --git a/dist/pesde/lune/rbx-components/src/extend-root/use-module-as-component.luau b/rbx-components/extend-root/use-module-as-component.luau similarity index 50% rename from dist/pesde/lune/rbx-components/src/extend-root/use-module-as-component.luau rename to rbx-components/extend-root/use-module-as-component.luau index 46724fe7..e9902371 100644 --- a/dist/pesde/lune/rbx-components/src/extend-root/use-module-as-component.luau +++ b/rbx-components/extend-root/use-module-as-component.luau @@ -1,11 +1,9 @@ -local componentClasses = require("../component-classes") -local types = require("../types") +local componentClasses = require "../component-classes" +local types = require "../types" local function useModuleAsComponent(root: types.RootPrivate, module: ModuleScript) local required = (require)(module) - if componentClasses[required] then - table.insert(root, required) - end + if componentClasses[required] then table.insert(root, required) end return root end diff --git a/rbx-components/extend-root/use-modules-as-components.luau b/rbx-components/extend-root/use-modules-as-components.luau new file mode 100644 index 00000000..ed253b6a --- /dev/null +++ b/rbx-components/extend-root/use-modules-as-components.luau @@ -0,0 +1,22 @@ +local componentClasses = require "../component-classes" +local types = require "../types" + +local function useModulesAsComponents( + root: types.RootPrivate, + modules: { Instance }, + predicate: ((ModuleScript) -> boolean)? +) + for index = 1, #modules do + local module = modules[index] + + if not module:IsA "ModuleScript" then continue end + + if predicate and not predicate(module) then continue end + + local required = (require)(module) + if componentClasses[required] then table.insert(root, required) end + end + return root +end + +return useModulesAsComponents diff --git a/dist/npm/rbx-components/src/init.luau b/rbx-components/init.luau similarity index 59% rename from dist/npm/rbx-components/src/init.luau rename to rbx-components/init.luau index 598bcea4..e3e80a6f 100644 --- a/dist/npm/rbx-components/src/init.luau +++ b/rbx-components/init.luau @@ -1,7 +1,7 @@ -local componentClasses = require("@self/component-classes") -local create = require("@self/create") -local extendRoot = require("@self/extend-root") -local types = require("@self/types") +local componentClasses = require "@self/component-classes" +local create = require "@self/create" +local extendRoot = require "@self/extend-root" +local types = require "@self/types" export type Component = types.Component export type Root = types.Root @@ -9,16 +9,14 @@ export type Root = types.Root local components = { create = create, extendRoot = extendRoot, - _ = table.freeze({ + _ = table.freeze { componentClasses = componentClasses, - }), + }, } local mt = {} -function mt.__call(_, component: Self): types.Component - return create(component) -end +function mt.__call(_, component: Self): types.Component return create(component) end table.freeze(mt) return table.freeze(setmetatable(components, mt)) diff --git a/dist/pesde/lune/rbx-components/src/logger.luau b/rbx-components/logger.luau similarity index 87% rename from dist/pesde/lune/rbx-components/src/logger.luau rename to rbx-components/logger.luau index edcc7fac..563004ea 100644 --- a/dist/pesde/lune/rbx-components/src/logger.luau +++ b/rbx-components/logger.luau @@ -1,6 +1,6 @@ -local logger = require("../logger") +local logger = require "../logger" -return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl("rbx-components"), { +return logger.create("@prvdmwrong/rbx-components", logger.standardErrorInfoUrl "rbx-components", { alreadyExtendedRoot = "Root already has component extension.", invalidComponent = "Not a component, create one with `components(MyComponent)` or `components.create(MyComponent)`.", alreadyRegisteredComponent = "Component already registered.", diff --git a/dist/pesde/luau/rbx-components/src/types.luau b/rbx-components/types.luau similarity index 92% rename from dist/pesde/luau/rbx-components/src/types.luau rename to rbx-components/types.luau index 5bc17dcf..26f899a2 100644 --- a/dist/pesde/luau/rbx-components/src/types.luau +++ b/rbx-components/types.luau @@ -1,5 +1,5 @@ -local dependencies = require("../dependencies") -local roots = require("../roots") +local dependencies = require "../dependencies" +local roots = require "../roots" export type Component = dependencies.Dependency, diff --git a/rbx-lifecycles/init.luau b/rbx-lifecycles/init.luau new file mode 100644 index 00000000..47a0165b --- /dev/null +++ b/rbx-lifecycles/init.luau @@ -0,0 +1,81 @@ +local Players = game:GetService "Players" +local RunService = game:GetService "RunService" + +local prvd = require "./prvdmwrong" + +local fireConcurrent = prvd.fireConcurrent + +local RbxLifecycles = {} +RbxLifecycles.name = "@prvdmwrong/rbx-lifecycles" +RbxLifecycles.priority = -math.huge + +RbxLifecycles.preSimulation = prvd.lifecycle("onPreSimulation", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.postSimulation = prvd.lifecycle("onPostSimulation", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.preAnimation = prvd.lifecycle("onPreAnimation", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.preRender = prvd.lifecycle("onPreRender", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.playerAdded = prvd.lifecycle("onPlayerAdded", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.playerRemoving = prvd.lifecycle("onPlayerRemoving", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.characterAdded = prvd.lifecycle("onCharacterAdded", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.characterRemoving = prvd.lifecycle("onCharacterRemoving", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.localCharacterAdded = prvd.lifecycle("onLocalCharacterAdded", fireConcurrent) :: prvd.Lifecycle +RbxLifecycles.localCharacterRemoving = + prvd.lifecycle("onLocalCharacterRemoving", fireConcurrent) :: prvd.Lifecycle + +local function wrapLifecycle(lifecycle: prvd.Lifecycle<...unknown>) + return function(...: unknown) lifecycle:fire(...) end +end + +function RbxLifecycles.constructor(self: RbxLifecycles) + self.connections = {} :: { RBXScriptConnection } + + self:_addConnections( + RunService.PreSimulation:Connect(wrapLifecycle(RbxLifecycles.preSimulation :: any)), + RunService.PostSimulation:Connect(wrapLifecycle(RbxLifecycles.postSimulation :: any)), + RunService.PreAnimation:Connect(wrapLifecycle(RbxLifecycles.preAnimation :: any)) + ) + + if RunService:IsClient() then + self:_addConnections(RunService.PreRender:Connect(wrapLifecycle(RbxLifecycles.preRender :: any))) + end + + local function onPlayerAdded(player: Player) + self.playerAdded:fire(player) + + local character = player.Character or player.CharacterAdded:Wait() + self.characterAdded:fire(character) + + if player == Players.LocalPlayer then self.localCharacterAdded:fire(character) end + end + + for _, existingPlayer in Players:GetPlayers() do + task.spawn(onPlayerAdded, existingPlayer) + end + + self:_addConnections( + Players.PlayerAdded:Connect(onPlayerAdded), + Players.PlayerRemoving:Connect(wrapLifecycle(RbxLifecycles.playerRemoving :: any)) + ) +end + +function RbxLifecycles.finish(self: RbxLifecycles) + for _, connection in self.connections do + if connection.Connected then connection:Disconnect() end + end + table.clear(self.connections) +end + +function RbxLifecycles._addConnections(self: RbxLifecycles, ...: RBXScriptConnection) + for index = 1, select("#", ...) do + table.insert(self.connections, select(index, ...) :: any) + end +end + +-- Needed so typescript can require the provider as: +-- +-- ```ts +-- import { RbxLifecycles } from "@rbxts/rbx-lifecycles" +-- ``` +RbxLifecycles.RbxLifecycles = RbxLifecycles + +export type RbxLifecycles = typeof(RbxLifecycles) +return prvd(RbxLifecycles) diff --git a/rokit.toml b/rokit.toml deleted file mode 100644 index f44178d6..00000000 --- a/rokit.toml +++ /dev/null @@ -1,13 +0,0 @@ -# This file lists tools managed by Rokit, a toolchain manager for Roblox projects. -# For more information, see https://github.com/rojo-rbx/rokit - -# New tools can be added by running `rokit add ` in a terminal. - -[tools] -stylua = "JohnnyMorganz/StyLua@2.3.1" -luau-lsp = "JohnnyMorganz/luau-lsp@1.58.0" -rojo = "rojo-rbx/rojo@7.6.1" -# Runtimes -lune = "lune-org/lune@0.10.4" -zune = "Scythe-Technology/Zune@0.5.2" -lute = "luau-lang/lute@0.1.0-nightly.20251220" diff --git a/roots/create.luau b/roots/create.luau new file mode 100644 index 00000000..f0e3e9a7 --- /dev/null +++ b/roots/create.luau @@ -0,0 +1,48 @@ +local destroy = require "./methods/destroy" +local lifecycles = require "../lifecycles" +local rootConstructing = require "./hooks/root-constructing" +local start = require "./methods/start" +local types = require "./types" +local useModule = require "./methods/use-module" +local useModules = require "./methods/use-modules" +local useProvider = require "./methods/use-provider" +local useProviders = require "./methods/use-providers" +local useRoot = require "./methods/use-root" +local useRoots = require "./methods/use-roots" +local willFinish = require "./methods/will-finish" +local willStart = require "./methods/will-start" + +local function create(): types.Root + local self: types.Self = { + type = "Root", + + start = start, + + useProvider = useProvider, + useProviders = useProviders, + useModule = useModule, + useModules = useModules, + useRoot = useRoot, + useRoots = useRoots, + destroy = destroy, + + willStart = willStart, + willFinish = willFinish, + + _destroyed = false, + _rootProviders = {}, + _rootLifecycles = {}, + _subRoots = {}, + -- WTH DEVIATION: better method names, to be upstreamed + _start = lifecycles.create("onStart", lifecycles.handlers.fireConcurrent), + _finish = lifecycles.create("onFinish", lifecycles.handlers.fireSequential), + } :: any + + for _, callback in rootConstructing.callbacks do + callback(self) + end + + return self +end + +return create diff --git a/dist/pesde/lune/roots/src/hooks/lifecycle-used.luau b/roots/hooks/lifecycle-used.luau similarity index 60% rename from dist/pesde/lune/roots/src/hooks/lifecycle-used.luau rename to roots/hooks/lifecycle-used.luau index bd29276a..d15e5ab4 100644 --- a/dist/pesde/lune/roots/src/hooks/lifecycle-used.luau +++ b/roots/hooks/lifecycle-used.luau @@ -1,16 +1,14 @@ -local lifecycles = require("../../lifecycles") -local types = require("../types") +local lifecycles = require "../../lifecycles" +local types = require "../types" local callbacks: { (root: types.Self, provider: lifecycles.Lifecycle) -> () } = {} local function onLifecycleUsed(listener: (root: types.Root, lifecycle: lifecycles.Lifecycle) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onLifecycleUsed = onLifecycleUsed, -}) +} diff --git a/dist/pesde/lune/roots/src/hooks/provider-used.luau b/roots/hooks/provider-used.luau similarity index 61% rename from dist/pesde/lune/roots/src/hooks/provider-used.luau rename to roots/hooks/provider-used.luau index dac2573c..f4d93347 100644 --- a/dist/pesde/lune/roots/src/hooks/provider-used.luau +++ b/roots/hooks/provider-used.luau @@ -1,16 +1,14 @@ -local providers = require("../../providers") -local types = require("../types") +local providers = require "../../providers" +local types = require "../types" local callbacks: { (root: types.Self, provider: providers.Provider) -> () } = {} local function onProviderUsed(listener: (root: types.Root, provider: providers.Provider) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onProviderUsed = onProviderUsed, -}) +} diff --git a/dist/pesde/lune/roots/src/hooks/root-constructing.luau b/roots/hooks/root-constructing.luau similarity index 62% rename from dist/pesde/lune/roots/src/hooks/root-constructing.luau rename to roots/hooks/root-constructing.luau index 5fb8b819..22126b9b 100644 --- a/dist/pesde/lune/roots/src/hooks/root-constructing.luau +++ b/roots/hooks/root-constructing.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (root: types.Self) -> () } = {} local function onRootConstructing(listener: (root: types.Root) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onRootConstructing = onRootConstructing, -}) +} diff --git a/dist/pesde/roblox/roots/src/hooks/root-destroyed.luau b/roots/hooks/root-destroyed.luau similarity index 61% rename from dist/pesde/roblox/roots/src/hooks/root-destroyed.luau rename to roots/hooks/root-destroyed.luau index 10b79b54..f26eed20 100644 --- a/dist/pesde/roblox/roots/src/hooks/root-destroyed.luau +++ b/roots/hooks/root-destroyed.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (root: types.Self) -> () } = {} local function onRootDestroyed(listener: (root: types.Root) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onRootDestroyed = onRootDestroyed, -}) +} diff --git a/dist/pesde/luau/roots/src/hooks/root-finished.luau b/roots/hooks/root-finished.luau similarity index 61% rename from dist/pesde/luau/roots/src/hooks/root-finished.luau rename to roots/hooks/root-finished.luau index d3519cea..1027ec0f 100644 --- a/dist/pesde/luau/roots/src/hooks/root-finished.luau +++ b/roots/hooks/root-finished.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (root: types.Self) -> () } = {} local function onRootFinished(listener: (root: types.Root) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onRootFinished = onRootFinished, -}) +} diff --git a/dist/pesde/roblox/roots/src/hooks/root-started.luau b/roots/hooks/root-started.luau similarity index 61% rename from dist/pesde/roblox/roots/src/hooks/root-started.luau rename to roots/hooks/root-started.luau index 2ae6f90c..aff71743 100644 --- a/dist/pesde/roblox/roots/src/hooks/root-started.luau +++ b/roots/hooks/root-started.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (root: types.Self) -> () } = {} local function onRootStarted(listener: (root: types.Root) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onRootStarted = onRootStarted, -}) +} diff --git a/dist/pesde/luau/roots/src/hooks/root-used.luau b/roots/hooks/root-used.luau similarity index 64% rename from dist/pesde/luau/roots/src/hooks/root-used.luau rename to roots/hooks/root-used.luau index 71f172cc..3e0c26e1 100644 --- a/dist/pesde/luau/roots/src/hooks/root-used.luau +++ b/roots/hooks/root-used.luau @@ -1,15 +1,13 @@ -local types = require("../types") +local types = require "../types" local callbacks: { (root: types.Self, subRoot: types.Root) -> () } = {} local function onRootUsed(listener: (root: types.Root, subRoot: types.Root) -> ()): () -> () table.insert(callbacks, listener) - return function() - table.remove(callbacks, table.find(callbacks, listener)) - end + return function() table.remove(callbacks, table.find(callbacks, listener)) end end -return table.freeze({ +return table.freeze { callbacks = callbacks, onRootUsed = onRootUsed, -}) +} diff --git a/roots/init.luau b/roots/init.luau new file mode 100644 index 00000000..857a4577 --- /dev/null +++ b/roots/init.luau @@ -0,0 +1,28 @@ +local create = require "@self/create" +local lifecycleUsed = require "@self/hooks/lifecycle-used" +local providerUsed = require "@self/hooks/provider-used" +local rootConstructing = require "@self/hooks/root-constructing" +local rootDestroyed = require "@self/hooks/root-destroyed" +local rootFinished = require "@self/hooks/root-finished" +local rootStarted = require "@self/hooks/root-started" +local rootUsed = require "@self/hooks/root-used" +local types = require "@self/types" + +export type Root = types.Root +export type StartedRoot = types.StartedRoot + +local roots = table.freeze { + create = create, + hooks = table.freeze { + onLifecycleUsed = lifecycleUsed.onLifecycleUsed, + onProviderUsed = providerUsed.onProviderUsed, + onRootUsed = rootUsed.onRootUsed, + + onRootConstructing = rootConstructing.onRootConstructing, + onRootStarted = rootStarted.onRootStarted, + onRootFinished = rootFinished.onRootFinished, + onRootDestroyed = rootDestroyed.onRootDestroyed, + }, +} + +return roots diff --git a/dist/pesde/lune/roots/src/logger.luau b/roots/logger.luau similarity index 81% rename from dist/pesde/lune/roots/src/logger.luau rename to roots/logger.luau index 92e611ef..211115f3 100644 --- a/dist/pesde/lune/roots/src/logger.luau +++ b/roots/logger.luau @@ -1,6 +1,6 @@ -local logger = require("../logger") +local logger = require "../logger" -return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl("roots"), { +return logger.create("@prvdmwrong/roots", logger.standardErrorInfoUrl "roots", { useAfterDestroy = "Cannot use Root after it is destroyed.", alreadyDestroyed = "Cannot destroy an already destroyed Root.", alreadyFinished = "Root has already finished.", diff --git a/dist/pesde/roblox/roots/src/methods/destroy.luau b/roots/methods/destroy.luau similarity index 58% rename from dist/pesde/roblox/roots/src/methods/destroy.luau rename to roots/methods/destroy.luau index 0c62a935..5e72ddac 100644 --- a/dist/pesde/roblox/roots/src/methods/destroy.luau +++ b/roots/methods/destroy.luau @@ -1,10 +1,8 @@ -local logger = require("../logger") -local types = require("../types") +local logger = require "../logger" +local types = require "../types" local function destroy(root: types.Self) - if root._destroyed then - logger:fatalError({ template = logger.alreadyDestroyed }) - end + if root._destroyed then logger:fatalError { template = logger.alreadyDestroyed } end root._destroyed = true table.clear(root._rootLifecycles) table.clear(root._rootProviders) diff --git a/dist/pesde/lune/roots/src/methods/start.luau b/roots/methods/start.luau similarity index 62% rename from dist/pesde/lune/roots/src/methods/start.luau rename to roots/methods/start.luau index 3f24dac5..c880cecd 100644 --- a/dist/pesde/lune/roots/src/methods/start.luau +++ b/roots/methods/start.luau @@ -1,10 +1,10 @@ -local dependencies = require("../../dependencies") -local lifecycles = require("../../lifecycles") -local logger = require("../logger") -local providers = require("../../providers") +local dependencies = require "../../dependencies" +local lifecycles = require "../../lifecycles" +local logger = require "../logger" +local providers = require "../../providers" local rootFinished = require("../hooks/root-finished").callbacks local rootStarted = require("../hooks/root-started").callbacks -local types = require("../types") +local types = require "../types" local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: providers.Provider) local lifecycleMethod = (provider :: any)[lifecycle.method] @@ -20,9 +20,7 @@ local function bindLifecycle(lifecycle: lifecycles.Lifecycle<...any>, provider: -- debug.profileend() -- end) -- else - lifecycle:register(function(...) - lifecycleMethod(provider, ...) - end) + lifecycle:register(function(...) lifecycleMethod(provider, ...) end) -- end end end @@ -40,17 +38,37 @@ local function start(root: types.Self): types.StartedRoot dependencies.sortByPriority(sortedProviders) local constructedProviders = {} + + -- PHASE 1: Instantiate everything first so they all exist in memory + for _, provider in sortedProviders do + -- If your provider.new() strictly REQUIRES dependencies immediately at creation, + -- pass an empty table that we mutate in Phase 2, or construct them with a placeholder. + local constructed = provider.new {} + constructedProviders[provider] = constructed + end + + -- PHASE 2: Resolve dependencies and bind lifecycles now that everyone exists for _, provider in sortedProviders do + local constructed = constructedProviders[provider] local providerDependencies = (provider :: any).dependencies + if typeof(providerDependencies) == "table" then - providerDependencies = table.clone(providerDependencies) - for key, value in providerDependencies do - providerDependencies[key] = constructedProviders[value] + -- Rebuild the actual dependency table with the INSTANCES we created in Phase 1 + local resolvedDeps = {} + for key, dependencyBlueprint in providerDependencies do + local instance = constructedProviders[dependencyBlueprint] + if not instance then + logger:fatalError { template = "Missing dependency: " .. tostring(dependencyBlueprint) } + end + resolvedDeps[key] = instance end + + -- Inject the resolved dependencies into the constructed instance + -- (Assuming your framework allows injecting post-init, or via a method) + constructed.dependencies = resolvedDeps end - local constructed = provider.new(providerDependencies) - constructedProviders[provider] = constructed + -- Now safe to bind lifecycles bindLifecycle(root._start, constructed) bindLifecycle(root._finish, constructed) @@ -72,9 +90,7 @@ local function start(root: types.Self): types.StartedRoot local didFinish = false function startedRoot:finish() - if didFinish then - return logger:fatalError({ template = logger.alreadyFinished }) - end + if didFinish then return logger:fatalError { template = logger.alreadyFinished } end didFinish = true root._finish:fire() diff --git a/dist/pesde/lune/roots/src/methods/use-lifecycle.luau b/roots/methods/use-lifecycle.luau similarity index 73% rename from dist/pesde/lune/roots/src/methods/use-lifecycle.luau rename to roots/methods/use-lifecycle.luau index 862c2d07..1e33bb8e 100644 --- a/dist/pesde/lune/roots/src/methods/use-lifecycle.luau +++ b/roots/methods/use-lifecycle.luau @@ -1,7 +1,7 @@ local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") +local lifecycles = require "../../lifecycles" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/roblox/roots/src/methods/use-lifecycles.luau b/roots/methods/use-lifecycles.luau similarity index 75% rename from dist/pesde/roblox/roots/src/methods/use-lifecycles.luau rename to roots/methods/use-lifecycles.luau index 3f12341f..c09931ac 100644 --- a/dist/pesde/roblox/roots/src/methods/use-lifecycles.luau +++ b/roots/methods/use-lifecycles.luau @@ -1,7 +1,7 @@ local lifecycleUsed = require("../hooks/lifecycle-used").callbacks -local lifecycles = require("../../lifecycles") -local runtime = require("../../runtime") -local types = require("../types") +local lifecycles = require "../../lifecycles" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/lune/roots/src/methods/use-module.luau b/roots/methods/use-module.luau similarity index 68% rename from dist/pesde/lune/roots/src/methods/use-module.luau rename to roots/methods/use-module.luau index a96b3d17..460236b8 100644 --- a/dist/pesde/lune/roots/src/methods/use-module.luau +++ b/roots/methods/use-module.luau @@ -1,7 +1,7 @@ local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") +local providers = require "../../providers" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool local providerClasses = providers._.providerClasses @@ -11,9 +11,7 @@ local function useModule(root: types.Self, module: ModuleScript) if providerClasses[moduleExport] then root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end + if typeof(moduleExport.name) ~= "string" then moduleExport.name = module.Name end threadpool.spawnCallbacks(providerUsed, root, moduleExport) end diff --git a/dist/pesde/lune/roots/src/methods/use-modules.luau b/roots/methods/use-modules.luau similarity index 63% rename from dist/pesde/lune/roots/src/methods/use-modules.luau rename to roots/methods/use-modules.luau index 8354a9d0..85396e2d 100644 --- a/dist/pesde/lune/roots/src/methods/use-modules.luau +++ b/roots/methods/use-modules.luau @@ -1,23 +1,19 @@ local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") +local providers = require "../../providers" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool local providerClasses = providers._.providerClasses local function useModules(root: types.Self, modules: { Instance }, predicate: ((module: ModuleScript) -> boolean)?) for _, module in modules do - if not module:IsA("ModuleScript") or predicate and not predicate(module) then - continue - end + if not module:IsA "ModuleScript" or predicate and not predicate(module) then continue end local moduleExport = (require)(module) if providerClasses[moduleExport] then root._rootProviders[moduleExport] = true - if typeof(moduleExport.name) ~= "string" then - moduleExport.name = module.Name - end + if typeof(moduleExport.name) ~= "string" then moduleExport.name = module.Name end threadpool.spawnCallbacks(providerUsed, root, moduleExport) end end diff --git a/dist/pesde/lune/roots/src/methods/use-provider.luau b/roots/methods/use-provider.luau similarity index 72% rename from dist/pesde/lune/roots/src/methods/use-provider.luau rename to roots/methods/use-provider.luau index 277d8049..ad7e11d1 100644 --- a/dist/pesde/lune/roots/src/methods/use-provider.luau +++ b/roots/methods/use-provider.luau @@ -1,7 +1,7 @@ local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") +local providers = require "../../providers" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/roblox/roots/src/methods/use-providers.luau b/roots/methods/use-providers.luau similarity index 75% rename from dist/pesde/roblox/roots/src/methods/use-providers.luau rename to roots/methods/use-providers.luau index 1489c3a3..41e3a00b 100644 --- a/dist/pesde/roblox/roots/src/methods/use-providers.luau +++ b/roots/methods/use-providers.luau @@ -1,7 +1,7 @@ local providerUsed = require("../hooks/provider-used").callbacks -local providers = require("../../providers") -local runtime = require("../../runtime") -local types = require("../types") +local providers = require "../../providers" +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/luau/roots/src/methods/use-root.luau b/roots/methods/use-root.luau similarity index 78% rename from dist/pesde/luau/roots/src/methods/use-root.luau rename to roots/methods/use-root.luau index efc4ad1e..a84f94b8 100644 --- a/dist/pesde/luau/roots/src/methods/use-root.luau +++ b/roots/methods/use-root.luau @@ -1,6 +1,6 @@ local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/luau/roots/src/methods/use-roots.luau b/roots/methods/use-roots.luau similarity index 81% rename from dist/pesde/luau/roots/src/methods/use-roots.luau rename to roots/methods/use-roots.luau index 7b5b9dda..92fba4f8 100644 --- a/dist/pesde/luau/roots/src/methods/use-roots.luau +++ b/roots/methods/use-roots.luau @@ -1,6 +1,6 @@ local rootUsed = require("../hooks/root-used").callbacks -local runtime = require("../../runtime") -local types = require("../types") +local runtime = require "../../runtime" +local types = require "../types" local threadpool = runtime.threadpool diff --git a/dist/pesde/roblox/roots/src/methods/will-finish.luau b/roots/methods/will-finish.luau similarity index 79% rename from dist/pesde/roblox/roots/src/methods/will-finish.luau rename to roots/methods/will-finish.luau index 893088f4..3f3d5ad3 100644 --- a/dist/pesde/roblox/roots/src/methods/will-finish.luau +++ b/roots/methods/will-finish.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local function willFinish(root: types.Self, callback: () -> ()) root._finish:register(callback) diff --git a/dist/pesde/roblox/roots/src/methods/will-start.luau b/roots/methods/will-start.luau similarity index 79% rename from dist/pesde/roblox/roots/src/methods/will-start.luau rename to roots/methods/will-start.luau index 7c3d88c3..b69581ca 100644 --- a/dist/pesde/roblox/roots/src/methods/will-start.luau +++ b/roots/methods/will-start.luau @@ -1,4 +1,4 @@ -local types = require("../types") +local types = require "../types" local function willStart(root: types.Self, callback: () -> ()) root._start:register(callback) diff --git a/dist/pesde/lune/roots/src/types.luau b/roots/types.luau similarity index 84% rename from dist/pesde/lune/roots/src/types.luau rename to roots/types.luau index 104143c4..38d9b625 100644 --- a/dist/pesde/lune/roots/src/types.luau +++ b/roots/types.luau @@ -1,5 +1,5 @@ -local lifecycles = require("../lifecycles") -local providers = require("../providers") +local lifecycles = require "../lifecycles" +local providers = require "../providers" type Set = { [T]: true } @@ -18,8 +18,8 @@ export type Root = { useLifecycles: (root: Root, lifecycles: { lifecycles.Lifecycle }) -> Root, destroy: (root: Root) -> (), - willStart: (callback: () -> ()) -> Root, - willFinish: (callback: () -> ()) -> Root, + willStart: (root: Root, callback: () -> ()) -> Root, + willFinish: (root: Root, callback: () -> ()) -> Root, } export type StartedRoot = { diff --git a/runtime/init.luau b/runtime/init.luau new file mode 100644 index 00000000..8665cc7f --- /dev/null +++ b/runtime/init.luau @@ -0,0 +1,16 @@ +-- Son its just Roblox +-- local implementations = require("@self/implementations") +-- local task = require("@self/libs/task") +local threadpool = require "@self/threadpool" +-- local warn = require("@self/libs/warn") + +-- export type RuntimeName = implementations.RuntimeName + +return table.freeze { + name = "roblox", + + task = task, + warn = warn, + + threadpool = threadpool, +} diff --git a/dist/pesde/lune/runtime/src/batteries/threadpool.luau b/runtime/threadpool.luau similarity index 76% rename from dist/pesde/lune/runtime/src/batteries/threadpool.luau rename to runtime/threadpool.luau index 6caf08b4..05ca7160 100644 --- a/dist/pesde/lune/runtime/src/batteries/threadpool.luau +++ b/runtime/threadpool.luau @@ -1,5 +1,3 @@ -local task = require("../libs/task") - local freeThreads: { thread } = {} local function run(f: (T...) -> (), thread: thread, ...) @@ -9,11 +7,11 @@ end local function yielder() while true do - run(coroutine.yield()) + (run :: any)(coroutine.yield()) end end -local function spawn(f: (T...) -> (), ...: T...) +local function spawn(f: (T...) -> (), ...: T...): thread local thread if #freeThreads > 0 then thread = freeThreads[#freeThreads] @@ -23,7 +21,7 @@ local function spawn(f: (T...) -> (), ...: T...) coroutine.resume(thread) end - task.spawn(thread, f, thread, ...) + return task.spawn(thread, f, thread, ...) end local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args...) @@ -32,7 +30,7 @@ local function spawnCallbacks(callbacks: { (Args...) -> () }, ...: Args end end -return table.freeze({ +return table.freeze { spawn = spawn, spawnCallbacks = spawnCallbacks, -}) +} diff --git a/dist/npm/runtime/src/types.luau b/runtime/types.luau similarity index 53% rename from dist/npm/runtime/src/types.luau rename to runtime/types.luau index ca050fce..c105b874 100644 --- a/dist/npm/runtime/src/types.luau +++ b/runtime/types.luau @@ -4,10 +4,8 @@ export type Runtime = { is: () -> boolean, } -local function Runtime(x: Runtime) - return table.freeze(x) -end +local function Runtime(x: Runtime) return table.freeze(x) end -return table.freeze({ +return table.freeze { Runtime = Runtime, -}) +} diff --git a/sitegen/README.md b/sitegen/README.md deleted file mode 100644 index facc8a0d..00000000 --- a/sitegen/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Sitegen - -## Usage - -```sh -lune run sitegen watch -``` - -## Acknowledgements - -- -- \ No newline at end of file diff --git a/sitegen/build.luau b/sitegen/build.luau deleted file mode 100644 index c968aaec..00000000 --- a/sitegen/build.luau +++ /dev/null @@ -1,26 +0,0 @@ -local fs = require("@lune/fs") -local h = require("./h") -local path = require("@lune-lib/utils/path") -local process = require("@lune/process") -local siteUrls = require("@sitegen/config/site-urls") -local sitemap = require("@sitegen/config/sitemap") - -local rootPath = process.args[1] - -pcall(fs.removeDir, "site") -fs.copy(path(rootPath, "static"), siteUrls.base) - -for _, location in sitemap do - local locationPath = location.path:gsub("^/", ""):gsub("/$", ""):split("/") - local parentPath = table.clone(locationPath) - parentPath[#parentPath] = nil - - local dirPath = path(siteUrls.base, table.unpack(locationPath)) - local filePath = path(dirPath, "index.html") - - print("Rendering page", filePath) - local rendered = h.flatten(location.render(location.props)) - - pcall(fs.writeDir, dirPath) - fs.writeFile(filePath, rendered) -end diff --git a/sitegen/components/article.luau b/sitegen/components/article.luau deleted file mode 100644 index 0141d423..00000000 --- a/sitegen/components/article.luau +++ /dev/null @@ -1,74 +0,0 @@ -local Document = require("./document") -local h = require("@sitegen/h") -local siteBaseUrl = require("@sitegen/utils/site-base-url") - -export type ArticleSection = { - title: string, - content: { h.Child }, - sections: { ArticleSection }?, -} - -local headings = { - h.h1, - h.h2, - h.h3, - h.h4, - h.h5, - h.h6, -} - -local defaultHeading = h.h6 - -local function Article(props: ArticleSection) - local toc = {} - - local content = { - h.h1(props.title) :: any, - props.content, - } - - local function processSections(sections: { ArticleSection }, depth: number) - for _, section in sections do - table.insert(content, { - (headings[depth] or defaultHeading)(section.title), - section.content :: any, - }) - - if section.sections then - processSections(section.sections, depth + 1) - end - end - end - - if props.sections then - processSections(props.sections, 1) - end - - return Document({ - title = props.title, - extraHead = { - h.link({ rel = "stylesheet", href = siteBaseUrl("stylesheets/article.css") }), - }, - main = { - h.section({ - class = "article-container", - - h.nav({ - class = "article-nav", - }), - - h.article({ - class = "article-content", - content, - }), - - h.div({ - class = "article-toc", - toc, - }), - }), - }, - }) -end - -return Article diff --git a/sitegen/components/button.luau b/sitegen/components/button.luau deleted file mode 100644 index 33c50d6b..00000000 --- a/sitegen/components/button.luau +++ /dev/null @@ -1,15 +0,0 @@ -local h = require("@sitegen/h") - -local function Button(props: { - href: string, - [number]: h.Child, -}) - return h.a({ - href = props.href, - class = "button", - - table.unpack(props), - }) -end - -return Button diff --git a/sitegen/components/code-snippet.luau b/sitegen/components/code-snippet.luau deleted file mode 100644 index 4c3a399c..00000000 --- a/sitegen/components/code-snippet.luau +++ /dev/null @@ -1,19 +0,0 @@ -local h = require("@sitegen/h") - -local function CodeSnippet(props: { - language: "lua" | "shell" | "typescript", - - [number]: h.Child, -}) - return h.pre({ - class = `code-snippet`, - - h.code({ - class = `language-{props.language}`, - - table.unpack(props), - }), - }) -end - -return CodeSnippet diff --git a/sitegen/components/document.luau b/sitegen/components/document.luau deleted file mode 100644 index 834159c0..00000000 --- a/sitegen/components/document.luau +++ /dev/null @@ -1,47 +0,0 @@ -local Navbar = require("@sitegen/components/navbar") -local h = require("@sitegen/h") -local siteBaseUrl = require("@sitegen/utils/site-base-url") - -local function Document(props: { - title: string?, - main: h.Child, - header: h.Child?, - extraHead: h.Child?, -}) - return { - "", - h.html({ - lang = "en", - h.head({ - h.meta({ charset = "UTF-8" }), - h.meta({ name = "viewport", content = "width=device-width, initial-scale=1.0" }), - - h.title((if props.title then `{props.title} - ` else "") .. "Prvd 'M Wrong"), - - h.link({ rel = "stylesheet", href = siteBaseUrl("stylesheets/reset.css") }), - h.link({ rel = "stylesheet", href = siteBaseUrl("stylesheets/fonts.css") }), - h.link({ rel = "stylesheet", href = siteBaseUrl("stylesheets/common.css") }), - - h.link({ - rel = "stylesheet", - href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css", - }), - h.script({ src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js" }), - h.script({ src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/lua.min.js" }), - h.script({ src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/ts.min.js" }), - h.script({ src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/languages/shell.min.js" }), - - props.extraHead :: any, - }), - h.body({ - Navbar(), - props.header and h.header(props.header) :: any, - h.main(props.main), - - h.script("hljs.highlightAll();"), - }), - }), - } -end - -return Document diff --git a/sitegen/components/navbar.luau b/sitegen/components/navbar.luau deleted file mode 100644 index 66448880..00000000 --- a/sitegen/components/navbar.luau +++ /dev/null @@ -1,28 +0,0 @@ -local forEach = require("@sitegen/utils/for-each") -local h = require("@sitegen/h") -local navPages = require("@sitegen/config/nav-pages") -local siteBaseUrl = require("@sitegen/utils/site-base-url") - -local function Navbar() - return h.nav({ - class = "navbar", - - h.div({ - class = "navbar-inner", - - h.a({ - href = siteBaseUrl(""), - "Prvd 'M Wrong", - }), - - forEach(navPages, function(index, page) - return index, h.a({ - href = page.href, - page.title, - }) - end) :: any, - }), - }) -end - -return Navbar diff --git a/sitegen/config/common-urls.luau b/sitegen/config/common-urls.luau deleted file mode 100644 index 80b19b67..00000000 --- a/sitegen/config/common-urls.luau +++ /dev/null @@ -1,3 +0,0 @@ -return { - rossThread = "https://discord.com/channels/385151591524597761/1267055070374268969", -} diff --git a/sitegen/config/nav-pages.luau b/sitegen/config/nav-pages.luau deleted file mode 100644 index 9f2c87ab..00000000 --- a/sitegen/config/nav-pages.luau +++ /dev/null @@ -1,30 +0,0 @@ -local siteBaseUrl = require("@sitegen/utils/site-base-url") - -export type NavPage = { - id: string, - href: string, - title: string, -} - -return { - { - id = "learn", - href = siteBaseUrl("learn"), - title = "Learn", - }, - { - id = "api", - href = siteBaseUrl("api"), - title = "API", - }, - { - id = "releases", - href = siteBaseUrl("releases"), - title = "Releases", - }, - { - id = "blog", - href = siteBaseUrl("blog"), - title = "Blog", - }, -} :: { NavPage } diff --git a/sitegen/config/site-urls.luau b/sitegen/config/site-urls.luau deleted file mode 100644 index 95256e58..00000000 --- a/sitegen/config/site-urls.luau +++ /dev/null @@ -1,6 +0,0 @@ -local path = require("@lune-lib/utils/path") -local process = require("@lune/process") - -return { - base = if process.env.IS_CI then "https://prvdmwrong.luau.page/" else path(process.cwd, "site"), -} diff --git a/sitegen/config/sitemap.luau b/sitegen/config/sitemap.luau deleted file mode 100644 index 0c6b4d1c..00000000 --- a/sitegen/config/sitemap.luau +++ /dev/null @@ -1,15 +0,0 @@ -local h = require("@sitegen/h") - -export type SitemapEntry = { - path: string, - render: (Props) -> h.Child, - props: Props, -} - -local sitemap: { SitemapEntry } = { - { path = "", render = require("@sitegen/pages/index") }, - { path = "learn", render = require("@sitegen/pages/learn/index") }, - { path = "learn/installation", render = require("@sitegen/pages/learn/installation") }, -} - -return sitemap diff --git a/sitegen/h.luau b/sitegen/h.luau deleted file mode 100644 index d363ec47..00000000 --- a/sitegen/h.luau +++ /dev/null @@ -1,133 +0,0 @@ -export type Child = string | { Child } - -local function flatten(child: Child): string - if typeof(child) == "string" then - return child - else - local flat = "" - for _, sub_child in child do - flat ..= flatten(sub_child) - end - return flat - end -end - -local function escape(attribute: string): string - attribute = string.gsub(attribute, "&", "&") - attribute = string.gsub(attribute, "<", "<") - attribute = string.gsub(attribute, ">", ">") - attribute = string.gsub(attribute, "'", "'") - attribute = string.gsub(attribute, '"', """) - return attribute -end - -local function createElement(tag: string) - local function element(props: string | { [unknown]: unknown }) - if typeof(props) == "table" then - local attributes = "" - for key, value in props do - if typeof(key) == "string" then - assert(typeof(value) == "string", "HTML attribute value must be string") - attributes ..= ` {key}="{escape(value)}"` - end - end - return `<{tag}{attributes}>{flatten({ table.unpack(props :: any) })}` - end - - return `<{tag}>{props}` - end - - return element -end - -return table.freeze({ - escape = escape, - flatten = flatten, - - div = createElement("div"), - span = createElement("span"), - h1 = createElement("h1"), - h2 = createElement("h2"), - h3 = createElement("h3"), - h4 = createElement("h4"), - h5 = createElement("h5"), - h6 = createElement("h6"), - p = createElement("p"), - a = createElement("a"), - img = createElement("img"), - button = createElement("button"), - input = createElement("input"), - label = createElement("label"), - textarea = createElement("textarea"), - select = createElement("select"), - option = createElement("option"), - ul = createElement("ul"), - ol = createElement("ol"), - li = createElement("li"), - table = createElement("table"), - tr = createElement("tr"), - td = createElement("td"), - th = createElement("th"), - thead = createElement("thead"), - tbody = createElement("tbody"), - tfoot = createElement("tfoot"), - form = createElement("form"), - br = createElement("br"), - hr = createElement("hr"), - strong = createElement("strong"), - b = createElement("b"), - em = createElement("em"), - i = createElement("i"), - u = createElement("u"), - s = createElement("s"), - sup = createElement("sup"), - sub = createElement("sub"), - small = createElement("small"), - code = createElement("code"), - pre = createElement("pre"), - blockquote = createElement("blockquote"), - nav = createElement("nav"), - header = createElement("header"), - footer = createElement("footer"), - section = createElement("section"), - article = createElement("article"), - aside = createElement("aside"), - main = createElement("main"), - details = createElement("details"), - summary = createElement("summary"), - dialog = createElement("dialog"), - time = createElement("time"), - address = createElement("address"), - mark = createElement("mark"), - progress = createElement("progress"), - meter = createElement("meter"), - caption = createElement("caption"), - figure = createElement("figure"), - figcaption = createElement("figcaption"), - legend = createElement("legend"), - fieldset = createElement("fieldset"), - dfn = createElement("dfn"), - kbd = createElement("kbd"), - var = createElement("var"), - cite = createElement("cite"), - q = createElement("q"), - - html = createElement("html"), - head = createElement("head"), - title = createElement("title"), - meta = createElement("meta"), - link = createElement("link"), - style = createElement("style"), - body = createElement("body"), - - script = createElement("script"), - noscript = createElement("noscript"), - - audio = createElement("audio"), - video = createElement("video"), - source = createElement("source"), - track = createElement("track"), - iframe = createElement("iframe"), - canvas = createElement("canvas"), - svg = createElement("svg"), -}) diff --git a/sitegen/init.luau b/sitegen/init.luau deleted file mode 100644 index 5f42c510..00000000 --- a/sitegen/init.luau +++ /dev/null @@ -1,65 +0,0 @@ -local fs = require("@lune/fs") -local path = require("@lune-lib/utils/path") -local process = require("@lune/process") -local stdio = require("@lune/stdio") -local task = require("@lune/task") - -local sitegenRootPath = path(process.cwd, "sitegen") -local sitePath = path(process.cwd, "site") - -local function watchPaths() - local paths = {} - - local function watch(path: string) - if fs.isDir(path) then - for _, name in fs.readDir(path) do - watch(path .. "/" .. name) - end - elseif fs.isFile(path) then - table.insert(paths, path) - end - end - - watch(sitegenRootPath) - - return paths -end - -local function spawnBuild() - local result = process.exec("lune", { "run", "sitegen/build", sitegenRootPath }) - stdio.write(result.stdout) - stdio.write(result.stderr) - - if not result.ok then - print("Failed to build site") - process.exit(1) - end - - return -end - -if table.find(process.args, "watch") then - local lastModifiedAt = {} - - while task.wait(1) do - local paths = watchPaths() - - local rebuild = false - for _, watched in paths do - local meta = fs.metadata(watched) - if rebuild or lastModifiedAt[watched] ~= meta.modifiedAt then - lastModifiedAt[watched] = meta.modifiedAt - rebuild = true - end - end - - if rebuild then - print(string.rep("\n", 80)) - spawnBuild() - end - end - - return -end - -spawnBuild() diff --git a/sitegen/pages/api/index.luau b/sitegen/pages/api/index.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/index.luau b/sitegen/pages/index.luau deleted file mode 100644 index 277a4130..00000000 --- a/sitegen/pages/index.luau +++ /dev/null @@ -1,97 +0,0 @@ -local Button = require("@sitegen/components/button") -local CodeSnippet = require("@sitegen/components/code-snippet") -local Document = require("@sitegen/components/document") -local h = require("@sitegen/h") -local rootConfig = require("@lune-lib/root-config") -local siteBaseUrl = require("@sitegen/utils/site-base-url") - -local CODE_EXAMPLE = [[ -function MyProvider.constructor( - self: MyProvider, - dependencies: typeof(MyProvider.dependencies) -) - self.value = otherProvider:someMethod() -end - -function MyProvider.start(self: MyProvider) - print("Value:", self.value) -end - -export type MyProvider = typeof(MyProvider) -return prvd(MyProvider)]] - -return function() - return Document({ - header = { - h.div({ - class = "hero-inner", - - h.section({ - class = "hero-lead", - - h.h1("Luau's Unstoppable Force"), - h.p("The Luau provider framework with a fantastic featureset, extensibility, \ - and intuitiveness. Structure Luau projects with service providers. All \ - free from logistical nightmares and zero sprawling mazes of bloaty \ - dependencies."), - - Button({ - href = siteBaseUrl("learn"), - "Get Started", - }), - }), - - h.section({ - class = "hero-supports", - - h.div({ - h.span("Available On"), - h.div({ - class = "hero-supports-icons", - h.a({ - href = "https://github.com/prvdmwrong/prvdmwrong", - }), - h.a({ - href = "https://pesde.dev/packages/prvdmwrong/prvdmwrong/latest/any", - }), - h.a({ - href = "https://wally.run/package/prvdmwrong/prvdmwrong", - }), - h.a({ - href = "https://github.com/prvdmwrong/prvdmwrong", - }), - }), - }), - - h.div({ - h.span("Supported Runtimes"), - h.div({ - class = "hero-supports-icons", - h.a({}), - h.a({}), - h.a({}), - h.a({}), - }), - }), - }), - - h.section({ - class = "hero-code-example", - - CodeSnippet({ - language = "lua", - - CODE_EXAMPLE, - }), - }), - }), - }, - main = { - h.section({}), - h.h1(string.rep("placeholder
", 80)), - }, - extraHead = { - h.link({ rel = "stylesheet", href = siteBaseUrl("stylesheets/landing.css") }), - }, - }) -end diff --git a/sitegen/pages/learn/fundamentals/lifecycles.luau b/sitegen/pages/learn/fundamentals/lifecycles.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/learn/fundamentals/providers.luau b/sitegen/pages/learn/fundamentals/providers.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/learn/fundamentals/roots.luau b/sitegen/pages/learn/fundamentals/roots.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/learn/fundamentals/using-dependencies.luau b/sitegen/pages/learn/fundamentals/using-dependencies.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/learn/index.luau b/sitegen/pages/learn/index.luau deleted file mode 100644 index 9004659b..00000000 --- a/sitegen/pages/learn/index.luau +++ /dev/null @@ -1,61 +0,0 @@ -local Article = require("@sitegen/components/article") -local commonUrls = require("@sitegen/config/common-urls") -local h = require("@sitegen/h") - -return function() - return Article({ - title = "Learn Prvd 'M Wrong", - content = { - h.p("Congratulations on choosing Prvd 'M Wrong, you’re finally making good decisions!"), - h.p("You will learn how to build great projects with Prvd 'M Wrong, even if you never used \ - it before, with advice from maintainers who know Prvd 'M Wrong best."), - }, - sections = { - { - title = "Expectations", - content = { - h.p("Prvd 'M Wrong expects:"), - h.ul({ - h.li("That you're comfortable with the Luau scripting language."), - h.li("That — if you will use Roblox-specific packages — you're familiar with Roblox"), - }), - h.p("Some articles might challenge you more than others. Remember, Prvd 'M Wrong is \ - built with you in mind, but it may still take a bit of time to absorb some \ - concepts. Take your time and explore at your own pace."), - }, - }, - { - title = "Support", - content = { - h.p("Prvd 'M Wrong is built with you in mind and our documentation aims to be as \ - useful and comprehensive as possible. However, you might need specific advice \ - on an issue, perhaps you may want to learn Prvd 'M Wrong through other means, \ - or you caught a bug."), - h.p({ - "Whatever you're looking for, feel free to swing by our ", - h.a({ - href = commonUrls.rossThread, - "dedicated thread over the Roblox OSS Discord server.", - }), - " Maintainers drop in frequently alongside eager \ - Prvd 'M Wrong users.", - }), - }, - }, - { - title = "Using the Documentation", - content = { - h.p("The Prvd 'M Wrong documentation aims to be as useful and comprehensive as \ - possible. You can open the documentation settings by clicking the gear \ - icon in the top right corner."), - h.p("These customization settings will persist between sessions:"), - h.ul({ - h.li("Dark, light and sepia color schemes"), - h.li("Preferred monospace fonts for code snippets"), - h.li("Relevant documentation for Luau and Roblox TypeScript"), - }), - }, - }, - }, - }) -end diff --git a/sitegen/pages/learn/installation.luau b/sitegen/pages/learn/installation.luau deleted file mode 100644 index 3cb2eb8e..00000000 --- a/sitegen/pages/learn/installation.luau +++ /dev/null @@ -1,33 +0,0 @@ -local Article = require("@sitegen/components/article") -local commonUrls = require("@sitegen/config/common-urls") -local h = require("@sitegen/h") - -return function() - return Article({ - title = "Installation", - content = { - h.p("Prvd 'M Wrong is distributed as several packages that needs to be installed into \ - your game."), - }, - sections = { - { - title = "Templates", - content = { - h.p("TBA"), - }, - }, - { - title = "Installation", - content = { - h.p("TBA"), - }, - }, - { - title = "Build from Source", - content = { - h.p("TBA"), - }, - }, - }, - }) -end diff --git a/sitegen/pages/learn/roblox/components.luau b/sitegen/pages/learn/roblox/components.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/pages/learn/roblox/roblox-lifecycles.luau b/sitegen/pages/learn/roblox/roblox-lifecycles.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/publish.luau b/sitegen/publish.luau deleted file mode 100644 index e69de29b..00000000 diff --git a/sitegen/static/fonts/jura.ttf b/sitegen/static/fonts/jura.ttf deleted file mode 100644 index 5256bad0a474f37df6fa30ab6e17f3efa44ac5be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259928 zcmdqK30&1h_dkAS=5sHLh`5oWz!eb@5#e4yG&9+*yQ1QfnX)P<0s*d>nVOlInVFfI znVFfHnVOkyQYGyvI*3+u+f6sj8elA%(%kTR<-~a3PNjxV1Lx}zRcs;ZJE_~iL1{s^rYb~jI9_|vjBa6mWO*+))&a*^OfchyVW%;@D zmWB5N@25b1-MHLI zI$alsjPAD?YWnsr_R6X3UlkY8X+KEeF{K?#c z;9}GWdHYWsT~x(l;SJzB%?J!}l%Jg;m8>)7!vsu}j`=bJF^2;4V>UC5tQj(lp-2NC zTO(s5+>1>cG@ZPSr0e-ROT4BlIeNkEkZstlU%zg&m#F5NS!Um5?0|#V6EeP7YFttA z1o&m-3n0Zex(0E@yNu>f!4ySK>Y~DlG08oFW8#cU{#D6jT4F+$LdP>?IW%rFOAnWz z1~Ml8WO-9iSFPat0N_Dd0COQd0do}{hIxek4)Z6Li%j!bIm`;S66Pwl3g&9|G&p#M zJp*$cd!86?#2dqG!b4$(qxUl&!6RTs@<^Cbyfw@=s4vFb@B{SoR>_72pw_!;Fk#3k_)n%0ICK}LiTNexwsV8rkdzldMOZ{n(`7B!$H zYj>^cWoe2A$|?P-msek^DXpoZ=`@?>(mYy1D^YiAXgzJDEwrD$Wns+0L-;Tnfpkc* zeC4Js+YTH#di>P63l}ec{q2<>e*CqX8+Kp+fWV*zjT#3xX&TZzG|UkZ*($1abeovi zxOk^4F)6u2N~aq;cj=mz;qKnEci*i30|sUf9y)CJh@8BFQAK0MmXwxPOqx2)pfASKdrjR&FUFVc8@^!B+LZ|e0&#Rbqb(;ws4ih~hs z@sBYaKovTUfp*T*xD9lMX}lKy%!is#n)dfa--y+?ABA9yC_XXv+97@! zl~6$~pMg|Js;IYxc_>QX zDk`T=)E-|Y<%4Q5+*QEi0L92D4qR7&LVM~*ZqUdEtzv{Z;3}h1#C6a>V55LdRD2b} z$Ba<|J0BdBBEBq-1H6~QE(Apf;uisvse6E~1N6&P+}e~S&t3|#h&5QHmb}T_9h3kL zB{*tv_WOK2+~m>(@F&ZZi}o#1c~68}^5KA=%r}+#E4&JI;!w5r@7B-n>vSUOWFojL z0R2+rRfv4Yfb$|%C$a=_fLye4A!XEx<3Ov|jwMT;s(7A+n8k1nR&ByHJEA1A&&i(RO_`-iGzPx;st2Z`XUTSyeO30& zXy9hwuGGDIG$_j$osminym+2r$@&$~Wne7^Qg^3C*}?0b*zL%xsup7s6G z_h&!Dua)0mza@UF{r&xe{mcCK`hVm9TOFS|;dOe{8B`~?&ayhs)j3k*XgI&&iiRIG;*D->G`i8oMxQs1Z#<{*@!+)%_Ew}HSg5i-Mpmv3!z46P^cp`Hgsg@J)yfo-wORG^s~_KLa&ASg*6V# z4tqM>9zH1i#qggTeI3Ib?>f#nzIIf%2y7A3BC17li_{kVTjaKQtHnnxK5Ow^i)#@% z5hW3mB4$PW*3zft?Jd8GY#n)f&~sHdYokNUp#jMjUj zgQA;9Pm7)#y*PSJ^rq<7qK~w3wn=OAV4G!ao@ui=CNL%>CMw1mb9>BVG4HpHXdBmd zRoe}*jbp1~pNM@f_T|_Uv6tHgwrkohvfa>jMeXiux4+%{?M}t{#Wjk{jVpf(yF8l$@P*)B=1RnJNe@d z=^Z9^*xup$l<1UhDU(umq(ej!rjpn%!w(rxiESjl*tScHBp-J`nab)VOLWA_8yf9lbxM{$ouJ@)sk+cT!;Z9S*<+|u(zuZF#b_WHbcO7Gix zFYEnXpPW8(`|RlRN#FW?WBO+IUEFtD-!J=h>^G_3_I{VL>SVRe8k{vTYjxJq{`LB2 z_kXDW_XD~QSTW$m0T%{_3>-4>v4N+u+h&i>-aROA(6B*s2dy1+deGIu(Syegerrg= zkWE8=8ro=R&!Las;&)5ZEd{sCx#iVcP7VtmHf-3$VLNWU;nvBwZol>O;dO?$9X@3E zq~T8vfA==u+q&O2a)G#D{##PktcN1Pwoa^%>Nn@3jXq~ytMq@3y=b@?OrX$?uatH~-ZFQ4m)!v0!6i z{lXT7358XK(+l4i)qGUNr~{+JM#qhQdi41sM^S81N>N5pcF_yP&5P$0|1c(JOx0L6 zw(i*8V;>*;RY{kU2TS&sTpQ;%Zs52VO8rYmmA+Pbq^w`rLuDV7eNy&KdEfHAx5wYU zs-j^<>x%6a`zwB_>{2p}~al6F!{im{>e< z{lu>(-8|``$+pQ|CQqC^bMk|emrW5y5Dx_Ii3cMiET|IW%gznwPy zuE4vVm>xGhZTk0jcf5Pn-J53EXN;V&amM+X;WInUOq)4w<`XlYnH4mv$*jy-<7aK3 z^~*i2?&)>U!}lDX?K^wW?3uG4o_*@x#`m_mck;bE=QN*FHRqH2BJV4{Z~T47=60LA z?f#him)-x|ye{(=&-;4buMgNCXz)PT1NT4h^L*d=cRpx5ICnwNg2fBgJ=Fi9+=s?J zbavsWg@1dv{NW!Kja+na(eX!GK63XXpDey<@v_CwJ=*rs@<(5K^wmcXEs0t(eaVAM zzI&|Tu@9H_T)J!N;bn!(s+Qfg?4@PbmZvYjfBE~%&pzJ$@d=NwethHOJ0Cx=B51|1 z6{Rbtta#&zh$rrP;?&BNm3OS%z4G9bjh=Konfv7CRkl?_SFKyM{i$|Oje6>dr=EN2 z<)>a>9lUzX>S?RzuD$8M)@fnoG~jc;?*Nw6%TL4qN-)vl-83Kl}c=oONG6 zH+8-L`mpuytUtZ}=jR(ff9vy0o_}XU#D;+zmTdUsg=Q}lzwpe)1{()#d~W0CFQ&dY z`NeH7{<0};(_NcRZjRi1$L3>O{I?9)^5B;9FSUNj{nG50-hb)p)~;J;Z{580>dR>_ zPkMRD%g460*w$-X$+oH6=51TPZSS^Aue5xn=#>{<`FVTN_F3E4Z2xda^Bo;_bls7? zBWK6d9rJcPzvJDV-F6P!xnk$JonP*Zy6f@AloDuzT392paul2rR`_}CH>5Ysx9(v=zezt$%{`32ynf*CZ#8}Ernknu_4r$d4<;QPb8ybV({J0~9{Bczx1V_X_#vM| z8HesV^xZr6zq9$>*mvi@yY0Qi_a1-m+TrZOj~sse@Ug=+@3(k=!25ac&wu~I``3;H zA8C1{!;zbh3_fz_k$aA8II{J~?j!q;ynCePgQyRBd{Fp7=?Akvc<_VeA8h+z?+1VX zp!%rK(RxQCjwT)LbF}d2)T6789ynTatiiF2V||VdI#zOQ!Le74eSSRXcA7jeR$`GFMas-hd-XEdm{Km_=y20Zaqn~>Uq9~s@m(Kp`uMX`O-{8r)#=oLQ)5oe zIJNZDs#DLMI(@qS>Cn?{PA8qd{q%;@+fVO5W1Q)FruUhlXFR8Me|AO$63=k=&So1* za;r)ykWC}M)M1$pHY`0g+rg642f%F5D|MKIzV6enw}TG$?VaJEH3RzfanKA1oE$VF zdq6J-_D!T@GV<)nai%dKEAhd3s6Ng$4Iyi2jC0Qoe-S6>Ux-uhUx*X z7vj|U7vjh>-9Ib4-yh;Y-lpr&rt7da6-bR#EqY^lYPxo;Cb_vKRV+H+S((ow@+ICp zKew`w1?T6FD`x@9q=J&-(e&%6irjqq0cb9L4T)U|T~g*bWu8*zab+G>=0RodQ|4}E zZY!%OD5Z^+$c5Hbj>|8n)s>a;3ACbee0e1;nNnC$23e0RQ%hwwQf6~yMkuoxOpg8m zsU~98Rc3%Pr96R2=@v{W9b;5SnP%zhD;)At_=hO7u`(ecMgQZFqWR*J5-by!@tUd_ zVajX)6OuXjM%v?SU)vnUI($8iKqFAB64UXOSYJHxd@@Q^n(^+R0jjsVD zFstxQhvcOvXi0if!e$4@QUWx<@`DV43`nq^W9y|93p^g7tE@Ro{Rc4^WC6W#+VRrO z!%4@kbKyAcbiwJWizJH4~YnSQp9YIW4S_#R@wn2s%hPG@#0SuBXmZ0Qz&Dm<;_1PK{ zFcTorlXi2YV5~k&lP-rqDOAi6_lddUelbrx0GXNH@G)8&F-EKrXSj_7!(}8H9gL2~ zjmAyJ%|@z`Ze$w$j4Y!+WN-|rXNZ|%mbgdE7Waz3iLb=hMwHRUXlt}H+8gnP(?~Ru zjTEDk(b?!?bT!h945OFP+vsETtyShmsw8M3Ncsdz6_X{OIN5pmlr6b|y&wU;QrcWj zN6?b8WjIBm?Pc9U_K13rWh2afa%LOC?Fy3 z5`*CrNOl3a6I|IMU;Bc-7$^p*+`N5I(j161CKslEFvgUp51BrJNX5kMDla?m5z?(p z+*hED5~N$1xQ?jBos`8nz+V8u4M=M_Yb!DI4h~tE^m|rg0{yrT3xl7x5Bb2wR4?$f zKkAiM&>B|8CMY_~>1j5OjjxrXl(40Eay0r8H*5%P4xb?MH+rHDzB78j{2tPME-oA0 zVE(OEjJ_&H9~GmwiqT8Ofba4qxo&?*qnSD1;VJ@rgDxbA zvQNl7WKP%9|MULsuGPamHI+h5StyJBH~GU1h#9Btzd15wsSH|8Q!vH@Q4X^NSo2jm z#jlvyuNsgk8?7KW4=`(& zA~bL2tk1RNUCP|0Jf6$4>zH!J3c?!Uge)u)GZyZ+;4;UtoRc|g$smDdPhrO10N3*v z>GJ*o_W-KgzTjy%wUx8E>aowE&pyc}h~eTkF+z+KIpXgB(M;A>&HU*9SR=-<+u3-` z3{>HxN&3HTR;vM)cd?$aCzr{}rLj;I=qM>LeB1N=_6A2}qjC zi-;CcxIVH+)Qe~k(KsR`A}pe9M0ZGl3R@j~w*7Cs<{Eak@~kzHorv0ow8i`R9sA9Zp91Hg_tsgF8oDWX)JB#JaqrRroB>SVrnNIWIhi5JB| z)CpnV(aea%x|U&#F!GEFV?h`X^A8IP>l!vVEGKMC*mTs%%5Vzz4G#)$67C3(4v!B{ z3GW)-Jv_^*lbrCP@bd8K;d8ZGHtlcyYOP$$nhUPPU|;@H_DxK^FiN1Zga>ZAa5LccLtC&oar7~M$j;nZJE11@)0 z*Zo!hz4~Q_J7AWs13se*kd7XwW4NPvmk!Zcs;Jq4aZA;!0W+&-!2AqwUdF%nG~ngy zNY-+mLr*@x<9yutedk^0cb;#1{&nE5pN~1e>wLud7Uv!3!+~LcdA`@V9p{Ig+kgK4 za~I9z=i|I&&LdC6>34qh`Qhh7&wY8`23Np&xwE8m-$)boj&o~1J^bmLpY9?0bPZtr zrz=0b>(gAKGuV^b*N97MBoV{jl*O=3{3yRF(_tRS69s7X31X6%Dt3!~(ii@)#Xj+_ zIBvTCXo`b~aa6^HDb4^cifT;6SW&QdDK*N`N2-ho#w25kG1Zu6OgCm2vk*4#kF>7$ zvB~|n^=FH*IcBlp8f=c4I1)2oDy6HN zo?)0{M?ltIg#FcnI7d88k72L9mUhu@dY$&sJJ{=$W4CufOh>&Ofzp2Qwt^V!2}5qlgn=_lAR9>9)&qIg=oES?dsh_m7& zqk%ZdHi(BYV=WXP8^Pj?*e~aGqpo;goDjDgLE<*{f>4i`W z+-}IbrWEYZ`{1^tKefhv!8E!ZHwg1+ir9_Y#~0{XdXAo_H|QbkxX;rEbdoO9r*w(_ zMptkncnzB)AKV{=F$asFA6Zw{kEO8;b{p#@_OM&oU2HPDgWbs0PyOB!R zO*9tz8sk_On!|3P3XJ>NYzWO~BWV#Uq{VDBJ;FxOQZ|+zXQi~9jiY6(1iQTPw3=1X zQ>>D9vU&6hyN}kfDYS##PcO53X*-)sd!d7{pDm_0>0P#h4zrc?9`qZgv;OoVyBnvD zSo)1dQUOcG?M*4WnKD^px{nQm-a%XX6(^D}s2P1p_p{;99XX3N?=$Ma>~s?gpe)vc z2D8>Q8TZ)tvZ3@SE21T=nAWqYw2jT76|4+<(g}12>rD@^5j2(cp|{yGqrOoOvvxzH ziE)F`)MzX&tKH3a;)?i2e1W~k_u^aer8=U+yeaMcpkJw4}F*}M|qf=}TZjTOQ6@HOzVw>4k_A=Yf zcCekeRocxCvbWhgSfAfz@3AB71NJ^U!A`R?>>NAKF0jwoCH4jTl6}R#X5X-H*;RIp z)v#)g4GlNAjSKG2>+vA0V}IlI*+uTheR&-o!0U25_u+w9-G1Yoo#hR1ch!)+#6G7` z`kG?s7fQqVcQorr3s^2a0nLqP*hG4bEu=l{L3))v1o_W7oF6V=Km0NFXs5A;p1}_C z6P)8uVMlokd*BbT<2Zry<44$i9mg%cA9ZGRs4J^SPTasJVjr0VU72KP$+#G&K`e>} zvPim<^`*O57FDrKn!vizMAn@qu^u#@x#@1~+h;Op2C+eO4;xG~*g)FArqM<=oi?!< zw1v&0m)JeDmCdHjY$m0COShNyR ze81Z79N-7}8~g*_m8bG9{AQkJv=xasWo8&%_$B^1{{oVNE4)7+z;ETl`E59PI*nw0 zO>kb$Z|9}F3@6bziEkDK zyErV~z-m(}ip4m{G)9Y2VyqY=3Pq9VB5oF)M7roHdWrrbL-ZD%u}kSDx{FlNQFIVJ zM3(3(`iVZ`M$s3$x@7F@ZW3;z1@>?b>{yx`;YO$tCLR}9A+QRPv5rFj+hEV75DCUs z+9JUgMl1gmoV3MnjtMp=)+M+-w(ok{BEfL~X8~*W76~>7c=|IKfv^!&0@%WKDwxA| z)?5bs3V0ZP0e}YpO96p^zGgT@0*?iLNnE715{zW<4iJZEi_a!y&ylzXY$+12`QBEI zJS8AczYNosxCeX!H9j0X|Nj8?ELv%FL0JIe40r(#*vD-7Gq5!QkADG>0hwvDD9rd1 zu$9xg{|LHPp|j4NucE#$1&DzYIR{v{Hhx1@$Z; z5BQ(KD)_Gi905oi;2UFt@|R)%LEvMkvjk6Ge`0TeA4$M?kmE#-qrVzMGF*=#Y5?3C zLl{R#Js{Sh-)Z2Hv<0w+k5l#*z7S!^gF9-j*s*#@K;FNHmGJMZ{r-b>@$b~DPa@jE z)0WakJMqKd+Y76J7fZL%i6;If_#@3~islOd(yj%dx#~X+;siCf4WZEM0Vkwh#(d=W zPeA-Yx6}qX2Z%{D$2frc*hHP}S%3xTPriWefKu9wvqqShf!*kIT5JrX>7ol2h^|zC z@Hiuu)*1@{@w8e&GVGqz$d~~?4Ymu^*BC{m$YZU70k9=xQM7SI`%R@8Xpgl<5MUBv zy{1I)IY5FDNrMe1-E1tR3S&5}wPgTu5KqQ$0$4+Fwm4dAUq{hC4!EmmDqsPi1d{Z% zY<0~A(CBK*rbOE$gcnhO#Eq{}KACSUO#-j;QFn{QB3h_mDJ_J5BclYgG}wx$C-5p6 zPeCFrG9+YBym1irJU}_(OM5Qj6wy>M26O9DnkT__3TK(a)Ejl0hyJwKI1Kn2umIo- z7>aVlLW_AF+JJ*b3HTZXdZTbMn2Hm`)SAO=dQE__gz~UfEi$4h3Uu>~FDcTJP9C;5%-ougiaO63>Cer8vzU|=Ie(fS) zF@WIS3mEQM?@))8fC;uN(8vOfEYQdTjV$o50JO5ee>v8na`0ac{>#CCIruLJ|K;Gn z9Q*@pzUJH}=L)pvN(tgD-LK|h%(r|3ty1&%9P*WZGM@OBo{;mWtqNmO&WC-?{TTXX zH2U-^+gi}Mfd-*}uChU&TGHSXYJQa(GDD zjry1Y=z;q93Gf;4Zh*SL*8s)tC(2JJMO=W`si z7ny)Q|9}D6i}0rh04w-Yl*G5wKxyNqaUdiONfHdK+qgq4V28oSImmPlVPB}h7Jzx; zDApM;uA7;&(^hZ#B48EbSaxrSkVDY46a(hUtX1;wqYEbf#pR zT&p%xC+vCRjjfo==Fu425-RX*f_=$Gtn&-O<3_Z15ct8K-5%=&+e*}J6w1E{>mh(2 zf*atA^B}(jKKD`>?yhdd%~cLWvQj$yFko;kC;(m?a%#EpzD$Ls!|tGQNkhVP?f$E@ zgAne?#}g;VlLmdOg$M@UM`$qL2%b@1-dWqSPZiO_Dr_kYmhpHp;{J^KXrRjBp?AGK z%A{X?0(vsIIjDi0zveh3h{GfxpLvkA=3WN{a2N2~D3@o$me3ctgvr1GGSAu|>C^^K zm?s~P?eUki6<-CY%RCJ^G#gj}%|HkPP+fUfEW!MX!463NAq-P{WGz8O-fkMa*`5gr9kQ0-G zAgiVbf~**VcgRX9iXf|o$QTl1iXq5OAy|b(9^!1sjv+FJRGT15aS=r4i)$cuqi>gohK*{ip5(`92h8s25RhJo&?mM}nN3 zvWWT<4IsSqfasjigV2G{2Zs{fLQp9nXh#eux{YWALE0<3LN1|7p{0+igpNNh3-FQv z7Y2|5(-^}020Vp;{yvowB=ERKfDE202y%F+_|teydW2UOG>Pz{02kbJ2hmibI|;&i zx=VHOyGb_DOu{omx`)tcbT82yqWcI!e7au^g$Ib{6K*JI0ntN*iwZf$77;yy2T??i z5*}>f=7N?IEyLR^qQ?oB#&`ioD~X;YTxrl#M5_t6y|jkt8KSj>+W}ffxFMkRgj)jI zK)5lWjYKaJZ6exCw1wy;qOC+P6Kx}Ug=jm`4x*ie`w`krw1;Rfo^KMpMz}4(bqVeo z@K_8IbUHxv7STbXw+WYU^bX-Nj@~0WOwiq+BZS)sI!chxLMRIvEuFxlNWujLuKKo`nE ztOYTs4YVW%b&XcUq6jwuEShlV!D2}2vp_YV9kDoK?TN*c)Pivm?mZaPdy)v(4Y>PY zDFi7v>qNK%!Sx5biEsgeI|$a5pi98g*@RPk=xh z_oNVM<358ym1!VBgbfKc8%(%A!KDOlQ*fEVZY5k`u-gdN5V%ueIRwc&%OjRgtbkY{ z;c^9cESNlTf5FBO?pd%v4xDHLM6i0vk}huB_X zuM&HW*z3gh5qpE!eqwLRC(!IIVh4%6EjJ779b)eidym**V($}{9rgjSqr{F8J5KCF zVkd}wMC>H7kBOZkcAD53VxJH@OHz049I^AnE)e^S*hRwq2)jh=3q0y3_BUc*68nnS z*TlXd_ARmRh+QG}y?hAF{!Z*iVm}cUHuej#Uy1!j>?*Nq#H#VkSx)>MdMmi8ffgea zZEVD$;O9de>L-50{fXBh9zeVtEr~}GZ$;Qj@YckmiMJshL%c0Q_*mj41X&(0C0<6nocQg;D~MMTuOdF4_yjzGCTvWx z&hsh6?;t*v_??998NZA8bmDgtpFw;k@ma+0AwHY%j}Tu>{87T@hCfDpDe+~*mlJ=S_zL1r5MN3BN#d&ryIKg^_|wGK z5PydFTH?B#5WV)Li{Ddwwu39d>ips2-{zfIUI@^^^8OZ+|Jhl#&W{0Q+6 zh#w_>jQDZl9}+)7{3GHgiGNJ|6!Fu<&k+BF_*vqg5DJ_%nEeuQIzs6ztEUv)`9F|8hnAQJTn+b+?N1k{@vlL#hp z1BoUinvw`1(TqfM5}_o*NQ9GckZ2*5SVT(_ktAA?h$7LNL^O#uB%t01eK9=PZAT)G zM0*nPBoatCNw`QPl1L(vOrisc6cQatbRuyhiOwW$BGHA!%_O>#NF|X*BArAAiA)l1 z65U92C((mMPZGUI^d`}VL|+p9NMw=dPhtRxfh4j?3?ea@#1IlgN!&sL%8$2_7*66g z5+g{AB#}cRmqZ?kd=dpD3Q3G2F`7gXiDD9CNQ@;>LSh_=QW9k(%1PW#qJl&vi7FD~ zNlYLyk;EhtlSxb=aR-U1B<>`EXV7<%m`>tu5;I85Br%J`JtSt6xR=Bn68DjqOX7YK z^GG~EVm^rnNh~1o5Q&8(9wxDf#3LjYlX#SHuo92qhX_b4Be9&s<0Mv)c!I=A=!lS5 zMdB$Et4TafVhxFBNUSBuSj0LK&yiS9;&~DqNW4He42c&>Y$CCl#1;}S5sqf!WfI#+ zyh36-i5(<%lGsIJH;FwY_L6v&#A_s8CmgQC8zlCVc$35d5^s?>NaAf0he*6b;$0H& zkvL4^eG*4Vd_dwTiDM*=llYJzP!b=JI7#AT5~oO{yslA6L7NPI@( zB8kuCMX30Ka72XesrZt_S0uhB@ePS@Nqk4*3W@JY{6OOGBz`3E6N#Tm{6aXQir+|F zC2@^JHHjKBu_>tjHMjbK&$f!#ORA=jv5ky9PGN7W{ zkPN8xH6|mNj2p;kLPk?ELda-FMsqSk$p|AOoD2sUEy#! z1CEgmTVh0W|Lt!G&JXkO4XE{%vsi5F%JsLG_FA~d@2~7xGz+H^@An$XPtyOZ??-HL zbMTd7gI21)d9YP{Y^`)U2AKkmJpbq48ck^gj!fRKKh9I$uN?HJ*82X6=i2_06y4z# z@1-=G4*cQUN#=Lozui7_t-8;`@z3*>g43lc&;7Lj->8+PI+drU&HhrmJb#7v#Syfx z;{GF;^RbyDn{YS`z2Eix$k!yE&y)8*w=?Ko>l>x`HhZSW zG)vbPFA$pG@O^|eLuo$4QK%YaDpx&k0t5rHZ%o3Gcmj^Uvy?qS`9RhPANffPw^1sV z=~qQ_;FWps+T(c261r)1*Zvn`hW+C5o>RSYtq%P}1Qkja> z(`l1R2RX6g(4;Rzr_gT1+Cm#NhbfeTT(-i08q77c5M`Q&G_qtnQ5V^83N z>wBPc036Ilj9DtC^vza&^I+z~@6SJzuX5X|3BmD`uh6EZsc2Yq2?+zsksP|T2M`O z&83@5vQ60YcA0~2&jTluSd|&_R%7M{2UOSZGl)M z1-;+|tEkyhvq{mth;&zL&eaU7`IaJU-bD}IC&vMfqjEfy1G+=Jbrsk=gl0n|cYWzS z?gF%F0pgXTefL4cRe`i}RGA}7#_A10pIJ|FaP`I5&qg0;U9$#)8YlY2BEURwU5b8D zgtGh!DcpY0N&)4+{<=Vioci8eP!0h7TG#ma>xELcB z^#8!08yI0#gc0yZj~nHjr>$hWOI^^~bC-1MFdMT&zV#-4A5O1}Dd@BmFvKmOngCXT=&6+^U^#u#T?A{!&gTf%jEo9-$ z0sY1nEP}OUk*pPqf~I3@2)N#6ZJ?>%7CWJK)CS_M82VZ2_CjCUiFYk7h__;)51B;o zK*aSf{R%19d(for2wmzMS!Zeo8CM*HTWkbI80UOMQu%YZ0HVit=!=c?gf{kQ3(235a z7a-W$2))mI$PW{7+f%>_*(f%e6+s`g7~;m?pv^s&mEe6$DeisBSUKLwR6w$oLPuE@ z9b@CEh)tm5Y$7ziC$lNgmYxcI>1oiMp3d%OGa%FI2#wQO>>f57GOZiYXaC0LK z>`CnORzc#t5;Cn!wi=_O8e7*g_B2}q$@gXak{M%b*|TgN#zwh%KU9I&Me;SF((R>6 zX!mZR+o5MGb$q2Z@OJ6}xmHj5MQi)+ftL1O$hCSyGFt`V)&xkmCgLT^8_<8<&)#GQ zpecM1ukGH3Xsa*ug5RZn&%!Bz2`2Dx0bQ?rkpW{7Ja~{gWtM$#Eo`ZSorK@w>A+KXN8X9w$UF0!ltyn? zp32jBI?v#l+|9f3?z{)y{r2L$c^~|4Pd}cew0j5gY(9t&=0o^UyoDNOYWwmLd?e4| zxjc{O^8#MTNAc0Th!^uQd@L{F_*_#1n9t`A@&)`MyhMJOFXE5z#r#pegg=Jgw_Ao^w|iXvwjE!| zpTw`*J%!)4dm6uN_Y8j5?pgfW&~tn}f1YoE#`#8Qpl^cC`4(uMZ`FF}+xZT>=i0@0 z^F4eof0e(cG@;*6I?o62qUj)in;+uu;0^S9{4jr?AAtt+QGSdc=O6MD{3E3^eTtvv zXZR=lEdP|BLa)i!VosRqVf^GN()=+N!JyDcvTgIcU2AW-mH<*%)Y^+NlnW{a}g@S zM7VH>79s*KuOg-1Hgu??p-mkl+KO1w4sWsAi+H?Ia|)M86iLu&?f}i^j?ja?5!%l; zDV^x9(0@*YUUUZZo!v?wx`)z{?hQ@ozR-uxg0{5xMcxoGRNNwliCb&E|H~D5B3~4U zLNQ8=hNg8fG_J=&`+6Mou*>jj<#y<8SK=kic)XFBh&M8m@doA&yq38WZ({Be)A4?A zMy5Zog+$E%sQ@OJHO2vBy?54g+uQM`i}P47Y5{C#l*FMf`SW8yf~ z#XaEbIGcpxe)2go=qaqq^|3;)BK&eDg;4`agM?)ScIaKOVAi1kys!C4oD?5Jd;K(R zrcDsF1VPsFEKUl$X%D@Debh_X=f6z*#95{P4%rJ{0DUGd(k$^g?IIt%z4!t+qb-_t$f2WZ9p9fFrY+(>7HArq!@jH&!)Gs-b!3=H) z!_e<@eGNau->72*7U;#YXg^&hCz^Ju$4=L79X~ZiyHlkd z?~K>!Q$4n#1AnJa>bTtein3Cl)UwfKrG;btQ!9!~N9X2`uPXFO%`|PrQoOTHdVX<5 z{`hgDN(v|Wrx%n}<>u!XmR6}865I)=QE6bb-@61y1(K)CJ2l3#PNs6_t=_ z@1}CD)6H8bvjk43e>aP|(LFD>qE2^j9D5I|nZSt7HC^SJkeROB@K5#Wp>ywH=5Fs% zRa{a~Sf{6#l9`)Jl{G#gy@S2Cs%?93t487zTxmvc@M11drI&EC&qHz6}a*Jp-iJ44rNhN@SDo4h#VRVBqcow_nzo_5fcm!4_sS5#I} zDl?RhHyd7Fk^m z`D;o^$@T$eK?l?-Xp-hO!K@Bvg3~@w#i}##x=MB?=mIC}f^<}@#V4e=jcl~9J-Zg! zWV4Gp6LhhXQ|*JSI*fNF=(@`E*vYm*-nz)t8M$>vnV!1QCCSXJJLr#fk&x^&NY}+6 zv%A;^$x&z@q&kg#h*_*5-eUO;DJU+iD6A~5v=13wkvpNV&Mn?Rvsv7U_FGhtcIw)4 z=~i;5*oP^y{==-!9@InmjO-aFe|!c%Mr6;mN{$9{o0QTzXj_eV3_X{2Cz*Dt$Ij4h z9Y3|BcBe@jgG8rK_1KCI{9Qh|x;Aq4oRsUGlX43ck0z;jSDk!sx&8C4lGqEZ7RBUa zW|-hMGe}5Jwil{$*$ZpMO4G$l*X*Wiw$gR+(p9m*UXp*Im5<3rnl4$Ir(_*`3Uvtz ze>eH48i{u%>G%n5`)I{MozdP>sLDxjy8K65xfn%q5-Re>u@_tI0){&J6{`lrZ$+8> zq$@r!9jSZ}Bh9B+^HZ#+qhi&wR9;S3hdN`tw9Wio9RkLVt|%-lEy*n{D9*Q+s9Lv| zSQUo3DcvXmi)MT?E6hy^_EIxyX|1S<$)eDjlhW;F7WbGvbTwz_I?2%0ouPYChH4I! zLD!vA*RjjfJi3>qyKQCOahRcNAk#xl$I8%+oS9I!?2qFx-tAMS>&cvx((07`VNTMN zk~-M&<4#y5?G?2Onxwf+P~2g*aM>$WtU8s~)vz-`7dSb=sFHI~RV^~fW>0k{=wc+N z*~eRT2CBMlGCg(&+jwu;Gc{pzMNY`f^wfpsJkwow{2$An0M0#S*K^Q#H3yA1=b(vZ zF(!J8;WyEmgC?4D&}46**%94I_Q|#9AYD5y-74;m_9=?2{}ijQ*Bf0}F%Eq$ucR_A zA3u8)RIFl*9OIpn;^a?YiBTg**#IMpm041!hj-dCa^ouVjY4S@OQQ^i>ZXZ$tw_}E zlbB#m_K68*g(qU}ku9It(Ogp!&DlOa(X8?KL~|bn+ic%N%-kxztUZ~|TxejMBQMch zL=a!i|L`|^Z(@SSt=a_s=7N-%p!#QgqEqMZ)cH6ypH2^-I=)k_LWplpPKi#eyPp~y#@t%0vKVH*~_vEAbjo0+!b$;eX2<6mtoF4vke%NQK zeD&g**g?C^oke`2IhtX6{B=2#JnfqUJNv!>5j)sQF9O{3U8W5;b3mnx90?Pm+he&OcG} zm#FzNSBm(=BoE)7a(nX8{OY|>qMm;elXN~wnogpJKb>Ear#&?P9bC55lJcTlBdxG1 z*VZj}+_+rTV6KjdKAGi}#U*8>#xMklOax~a0W*4F|8MJ+TV9@vjqA9)f?VEbJnuW6 z4=u*Vu2>!^cvi6(P*i3cSUh@MuE@?E?=#3GC9;Z&MLHm>ve?WfwWGhvzpAXXtTI67 zs2sk?Q6YXZLo-~{HyxU$a`^WfS2$WnlF>aAR6QNZ<2Ex*SCx_A*1LGO+4@vPtpD6ZlcMv{ zyI8kgIox`O>ej1-+niKz64UARdBLsMX16&R;0&hoHwQo5I)A<0b~|-?a}Xn3=dVvW zZoR#5r)z#Y>T-3|bUW&Db<}h_dg5ui=I%Se-BHsu2Pw8^I=wka;nwNR!3nocZw^kl zb$WdOaqC6jt&cZuy`^xQgD$~s4m#MHKXZ`5t@%sT^xe8VZp}}o4%gc@w>hX1+(|mV zIfxV7db97=3$9xq2Hbi%+cV zZ?N5|I$o-dm+Fb9>1yGEJJoH=Rf9ecDKtyU;jeNtQB`m=iY}~j_@b~1G5I$)pBU-p zan7xeEN*i-gTIkX#cT&BUl4mYn}Qz95W3tQb$%UnxjX9o zusUH|fq0r;N1b0sU2c7rb87*HTOS(S`Vj2a8&S8pt-y?;>6k(pxIOKs>2}a=Q&5uN z)&do`KE$}SK*g;OF>X))F}DwxX>>Wv?E~Dp9OkwGZk>MzJyUe>%s{%Fdc*HFw>_AF zG(B@Uhg;K2((#itJ#%}2a8G&k4ADW)5ShAsnYz9+HC-*zaqDB0J5#6Eauj#6j%RM` z65Qsw1-8yVS?8au=_h;g*E3QF&y1_X%@cZp+Y}SR)^xPk(yc`W?o{0mQgwN?7}Tvr z5AIY=FIDH~*0w2NjCXZVT3^g zl)&=b3dkcY3d-pXmgR&@N%0>apQ>xb+{2)z-F~^HWmRCHIM28KmQe2_vz*DsqY}NJ%OtzO7RwBKo zsVWY^iXqslLJ`fhwHUyu&-4&ts)}_w^$9CJO%=$QV0J0kD%|aMD|+b4s*Axk3+~b< zF;{#CKXvlXFB_NVr;gAPGmEZIX)b*#bLrEmOXul|PxVuW{#q##>lT%jjm^y~n^0KG zS9QyHmp)Cq^l93qPt&f1v;dsz^9oDKCVCU;BdbdvQC<4T>e5G5mp(eW^pVh|k9;nD zo%2wNvt{io&QpFYfnXwW*m@_5LJc~HZhKzTb+h%kf zJ($gHGu*1dVe7$eZkOTKgU>7o+^VJGUHYu((q~1NJ|p7)f!WNxh%yy}bv>IIYY&1w zfLj(w+A4}{K{ztBXGSegcc$s-&aCB`uKEdX4aI2jvI>`V?wAvOq-5l zYD3}I(UZ3%1&c^N33@&FEo<9al#OCdx%FmYj#3#nKhYCOIX^(aN+}*TVxk{spP zI^j)j1TcSNZ_8D!&HWoJ1Y^~0TDRL&t+NoaW zjEU6QUE=gSNf)e|IDwaECDy|102Iz-0g)*T(M$#3T0g{|i!%FZJu}2}k1s z$rg8k0{Gf?sM~gz+MR&;nuTq$uvHc&{g$YBUcWh3=p+k6U2A#+EKK^DY11q}r-emZ zSQ85iv@pq^nHKz;lw*IeunQJ;(t~+R6nog?7rWQOHd@$9^!f#;6N;T;VdcPblwX#G zxq)?7ez6wT+`?pN0~N|Wer>_CnWF6_Ja|X1ZF{usJ{d=0+bzr+3a)fKuiqMvpBZ1K z^MVVr6|lw5OQ@f?FX(4p&~xVu!AD`tU(%?37A`Bhk0k%bMlFd46}ikD&e zVI0TA077EC7)qr5P@*YizfLZLu(LYKF#0Dk~Kg@T^mS7ma~) zjg@#XmBP#yZKOkc14B!|bXr(6urTE(u|}$F_BQ@)fJFZYAAji+{bQSR9={kXRASK= zWvJKBo5JfCeF|}oC^`o$4CReRNnxUt8e3^$G8AnG(;IJ|6*?n&Qgl)D(CEI=85Y*b z!s0C~%EF{ybCsfj<>%|cT31`x4;FUW!cJP)K@S!!IZ*WQpYt>?t+#qG6?#2?|1d@C z^`5k?S6SE+3!Cr3YEk}^I;cfunkPl;Dx%f}vL;&(^I(!n>nvFtt=;hJtU}QvG=_el zF&V1*Mr-s7?T7wgVo|^1mo~nYX`{|s*l`P!q5D5f0!9A=GDRfDrN*{c7)G-8TM2A& zBt~rH3=5lNVWk!({R&h(uir2$G|R%!6E!{bR*gwNGp*C|i?FaJ78dBiT2_0oNXef{ z+wupGU&{*?cGSWSdN7qjm8j)jk6%mlY?GIk>n#i|*iyA%OSGWI(2gz9iZIcaHI@Sm zJsDCQx;gb^s4 z#`anmN~HZzB8{O$wfvT-v?!bQL)kQj5^45ug5IkAP;!l-)EYy{ zYo#!GMjdEB^x}x12-HFg^w<_(%DQTC%EHi3Td0280{v8D=%*T6ZDETnY_5e(2Q~pv z(!z`7S$;#Y!l`w&MPK-3$Thh|Cku_Zea~93{-SlNl&fpEx5VXcllZl02^W@V)ro zAL}h_m4z*_u=y4y{bs2YQ!Kx73mau&!!2xpg{4_oiiJrIOnPyaU!;Zo8GrvcMTnI) z$inO%EbOWW3-?m?V%|EisDxedqzFT;g`t1IM2`qVUkKYChJK(i^n)<8J52O}FxC2D zXnl>L4`@t=s&);_vHUPY=}^p4Vdw`i(b5`2duvRFqTOMlEo=Fy)(=DLn|`5JL$8E_ z+t4$AiJ=5Kbf3buTPZe%t_fWp3NAzESlBcRtFo{$7M5dSGVNfMwzuV%W?_Fu`5&i9 zvC_s_Sfqu8SeTb`kmcu1i+X8}@c3>rwVHZel>Q*gGrj0#ZZQ3XxnCI znxPGwp%*sW+iWY$^?+5)z;Cnp&1T`hUY9o;B~Q#a6`#PVwH%NmUEcF$E+MMm6sPU z2VSnc^t@EsZ1JoWtx%KZ4$4dUe*=p>sY-)-{_o}Ht)c%6R;!+^*8jiA4}M|C;n$J@0juS?EeWCiP^y%0p9WPe@d^`&D`Ne_kwPp=Y0n-{X6YH)(uX z-Hy?8+?MfV{0i~ANGN!Oai#Iu#$%+Palt<-2zR1%$hZ)2Am}XoIvW>)vxD&SYV1p~ zG|c5l22eqD@{fguggDeOXE zP(8_Mwz0QyPaj!h+}6qWKwaEf8jGrr27KEX_qj-Mr0%8vkGc1Oi>gZh$M2p048!nO zzySwD!0`$=BI1aMBaFj6xn*UhWp24`>!&sA z)4HzT)^%IgT-SB2%v>U4jqvw=&b=35_#?RA@9Xuum${sC?zzu-&U2pgoO7P@oO84X zfQwVr7@!X*L0GLiEwE6BZ&gnMBRzhY(X1y*WGEZ`-W^~AzGyl1HyFO>l#PKU17h*^ z9?Vbc4WA*jh{b+Wb&7LnivasqDwLIf8{P=)&9@X&N3D4j^S=QXrGrhS>nWW#scb`t zS}Ek`&ts$O`S3B039*GxZqn6-+E0yJ$fdgIUuE3D!qWW9HSbEUB34rAs?YuNf=(c; zQ1wB;TFq;4aq2YX9s{^dk=OQF&4S+5`g+RE-nJUQ9l>Ydaw)2fNi2sLZw8Bb-KJ~|-V*!?K~NnqZuFz_4^g#fE$V8x z3~lAcRl!tpk*Y?`QR7a8rM1=gt_~)C4^gLSIX^1@LgeOM4f__`;-EiCZBewl$NJXdpd~{;^0Xp9& z8SJAvrw(vjm_X0f!cySrLhNS2USE97#YvNwr!Z>$4iP zU4yEM9w_2nRA=fp8$kg@3FPu2NNlB|Qq>foW4HzoM#>73bH1U7A5MNn3Akjl4{>IR z>Zq|ndl;_Fwi^Fbf~Y8ggsAoh9R8?gy>UOI5l`P?-zCm>1I6Kws^g8@*qb1F!!;>0 zjpcf(Rd$jz{;!b>X8@E^Y(+VEC)4i&b6qsre5n4H1BWE+K%`WxR(-(fd1^5S)>G_Q zb(%g|8_Qz181;NObDc7B*u_Yxhz3n}Xu%_jGEIW9MX#r~nq0pN{LAD5N1jpSldJ7B zzZ1qoaIJu(iKg~Sxlq-p&D9&Fc>8rkt8&#*zdag?htl%fpa?>|eO$5ME}sf|i~7G& z%metQ&iEO^AVE~yu)~H@xmmT^ugV8JhjPNUA{0+msBF~L8!7*gBC2X5;p|3PmSSf! zrLt7j=ojR(8DVSNYV_-ktLQD-zYJX&TwB3O7VPbWFu)T_!wq=RprcZ;5#<}sXdYHi zbOK&R9m8!SaBDN#0RL0aE`vw@m5+g^P!q@n2*-^ke37U6+^@j^PEu^rH2E#menMgD zLc<~LdG_|AU#0dm3rq7WVf@3|14V`E1MLpxXQfSYNq0;Q3IO6MKP$t@z;H5vr*)c8 zyn%I^p-i`g;-GX4>}$qFNHNXOioH`%f^Z4y%fQjCYBV@?M2$R++i=d1&RpvapXtiU z1^M=gfl4b+6XO%2M$JUZM-7KmZE$Tu3sH_;0hP)l9OqM{uA;Y)0oxgE@*p)H^FuvS z)M^U2WbJ3;E#D(u_w)!5{9)qh2$5`NddaG(eZE?UondM2XNmiF?Nw%vsXx)8x z!WE$jH*D5X&Hh-k6@3QU7gi_6Zu?A~WT5(})(GlY!&bPI8dO)E3lIxgoGi^&-9|0= z0sE&jQ$%v9npD^IC*X<(CQKSAeKlJ(+lT_nY{1GlKx!x_X*l1#3{{1D9lNlH{`Jk1|)X z&aAlv*9lFy_Nq1-u3F7j;)5I6!TI9_t__ zc%y1knzc{DbySm#J%tFbciYOfCw&rFSe;6sO~RENN+nPEIfVgeDB!_`T4&G}v$qAR zy-L(pC0?j@(pwk`H>tL1DJPM{KRPN0XFcBV0gAQC&vbk6CKkn#L9zLlm3HkC)k1`s z+RFJ8x_xlPfXl1tt-=Uy$=6&3=Ap!Us&bU3FN1XmHT5FJQBoYe28Td!MtXz(P(E53 zqJro@uSsEFa-3ayzg4wbxdJhpHQ_2JZJN&QB7Vgd**KF%jMMg+s!$7D0IfjfQlPfN zC8#pAEpRiA%*rTz-`n|0XBqB1jQylcCBJA zl))8E0P=8H-Gm-Q19H3{qor6D+fA{NvRrfaQ$E!f;4ffr8Z`y{aRs#+TiePt`?Zi& z;3~vXrXkKKDb7}YwG8Z{=qQJG6FP*;N(aH*R34eBj$RiMttVz)sVTdFl73_=A< zbqV69F@K#VnY*N*uj@4F+*$Q;=Gw}gf&^A7p46bNRm3CqU=}+QlzLe~@~;jl?Bl7N z>ofwlTLX$JGC-qR>a8j2wE5f?MJaO~<2HZ;(AI0#;@naTTt%o66&iwHr?qkm!965d zK~)@W0drgluR837DyC%O9O#266-TI?uzx0$AQVS=5-vUVID@L1{E8yx$Ag>3{B@L9 z6`b4%<}U!wdC&=UH}JYkK`-khOaaK(t3%>4V?WgW^- zosL{76~*8MQKE&iI24;W4o5WAQ@X_{X@wFsPc<6Q0@%A;yupM7y~mFCa{L_T|AFvU zu14rM@+;hs5vWD*7c>7>T`nk92ftN%zgKY;Jqe1LuF@+HFxOTULFG9g7N-ie4VnV@ z#gSt;&cO zu4Mi~@CW6S=ltO3I0v2tscT1p9{LCW?Ml6LwEDa|-N0$8!tuwhDWUF2tEukAkNj z=eA%+x~<&v@a^JGa?fz5upi$i+z*hISFtkUZmf-%i~UiHu|Mig?4h~~_b>Rp*mrcB zB1AEOZ^UkzgZLe^gC@UA5u=FVcPnBQvHVMlc*RhD4|dNS#=ngHGgJ6iuwUjj{vdXn zY{Zv4a1UTRPKIK?$z6c58}~r$Ik`t+!mg7qV{gvAxFZ$&aEkpP>_oUn@gnvg+^5)0 zI}a*e!Ws4dz{z?4S<5!Je8GfKJcC6+26#QcGGqwK| zd(MqAEY{Z`PB>&5mjo1qqM-3r9V&kt7sY1f?=(QjP;K|)pPjJ=) z4%K&@pGJP1_uB+FajuH|ieyDP??i}_UjZtL+!f8NmOzZIcktXSsX zs9Gh(8Vf(vz$|n#Tw<(5<|m1<1V1HF6yr34*Gzuw*2rmhg8H(H5PiZN>DF2I+`-t2-u1=Pj*3-;zX-i)U=JiXDQ{$u#TVm34X%kU3j?>903 zcKF9IKgMf_zY%^5^Xr&@4g3MjPw>sCOJXU6U~LdIaV!qyD4ybQZOjjT;U+QvYw)K5 zKP4Z}-UxWZdW+me=BH8;`x|BOi?q(imr&Q@set6XtkOar$KcG3XzasSh_+jSx3uCz zfwn^hr;$64Ju?xCy`#CC;8FJ9Cb{#(|81@KPwrLtox!S79RkX_}ctwG=F3WKa4NtqD;&~s=p5d{F=~H;_fQF36`XU^lh1D}S6AQ6JSq^k8 z2U?Z`Ez5y|E{X zA)Y9ej@QkNH}~IU?>mNe=f3%&9NG>WutazS;ns!y=UH5OC;vLU1^>|1@tclr@ompf zF)pRxotK`!k>7O27I<#Fl`A<8;C@I{x#j=A>5^&JJxuSnD6cCL&iH?G2QXv#zFFS+ z`?pA4!6Wz-mtpzA&ZT6 zkI{puMQtE_%rA1HO@s&P=iLnGnESTZSlj@-XXSwZS45iO`*Qe*zN@;SV!OPPsX(=e z!IJ6~xqH6k+{rX(hq4NAP!}O52y+W7ErJ^&e?c(GEv803@nXEhI7Egezw!QmyZ7Gl zJNi4)u48!j?yhvZ6;ICjtq^MC@F1Vm>Plg_TN4!^cD8wSB_sE z(y`zR3%SJ}9U!t=$l9Co&d`_~6yGv_5Z|`rN;O=PkA1_6m30S5om2DnNwk%uO#55H zzr*ESC*@aSnY81IR0+p^@QDnloBv{N<&@<#Yirb0)UR*81>KG61^p4>j++Ds#O-KC}pB>`;|Hdho zTSv-tMUHVddQgAf|wG1=QU=)K31X>libcL%v6oOXKmxuiON-5qoalQ9bn9&&TncUs^c0bZX~r34k=$_TO)NMyBnKz3 zOy=ftPHrAIALo@Ugy#5eXpSG}7C@Ww95iDuKohhLXT$C1cHmrV0M zxx@$a5jewY5N<7>#E-_=WMgm=SO87}8_x$pyIhXb$DkWRXeCbJvO&kZ8fU<*fu=c! ze-WCO75pCDtJtYm_uzD*=lOeaKG6&O8t7w+`1?o)!`G1xhJO&};?(fuHf zbvOm5fqzK3Ub&v%pv28TtlX&F$Zu3`Qf}gZrrfOD%x|I-arj4YBF@kGM{yF)b{;ku z(4sz$({J|jTcFX|$3I0U-e4Z{g2lP7c@z3L=n_u%U(pfkBZk#!DhTlV{&hWof zexW?i8YDXgvZUR^Ez` zk$fuLHk{h20p0C*PUPp{t8!@OG)yz6g@%7FLP$TS!O3XLIA5HHwj5ufJUD-p$7X0N zNhfAtIuE$IY_S{WUq2B zLSDzo(h8>K(=#of4rd^}3z+ZW9O*EeVuZ7xi6;=}BIafXpoF2X#Q8^RXyGF`4azqX zdRyWT9sbAST^twB1#v@B|9I5D1e|A-$f2~D1~ZcJkPh_`XCI?R-i0Uela?#xW<&2< zhT9MIa}GkvQD6N~U+3XDAGZp%b|IdNaBJDzj|w$-8A56>=fi^^A44jn;~mH}qyrgu z@;J|EJ9cLxeXo)6D9?B_jMa55>iQ8tBMq=W$@U9tL z+YCPb9=D160TRN*-Qa!%pOMyeFymtd<6|Y`V+A@Jy4*aTM{OZg2RnN4#gGsso^2@MD)8kydS0oOO zAQ^*_BMu(IICvQ2-~`6O!x;yQTq`h69m2RUo^hdpabXnWyeP(b(Ikhs5RyZ9LJr{x zIfN(V5T1}jcoJV47+)F~U&b(wjA6W}W4su^cu|KFxqitFWgKZ_9BE=4sbkvbNXC~s znkPf8*st6VZS|YVH=#8@h;z>anQnR@<63{lwLXk%4UB7}NvZ({NHunn)*0-EMI6kN zR0Fs0kZLNl5JRyaT3_zxz&Y~09lX@}79l)`PzChj#LFDxUj^e+CF3#`xa=snm?Ysq z##1q@l!mZ8#UdZSLapIB6WV)vZe-6hc+zYLp1Swh>?o)E03omy$G&ZDq_`Wc)e-JE zAbyUM2Cw3DL>11REW{a-^D)zTkpDH#LOiJm#>s&BI63c#q7|pVEd(_WD}SrvaK4tH zdPQ|Wbw%~PdYC#{{gV2q`Wy9iO`>MBX1pd_GgWh!X0B$Z=2gvU%@>->nty9YY16fn zwE5a@B=MQ=xeXxFz zeyF}cU!q^De^vj!{v-Xrd;@&P`r3V0`#$LVOW!XHoWaMCYFK7?!En+q#xKEdhTkT? zC;XoAd(rQ8zqkE<-58o92n}N!K(*{00@M}|?X|d@Z z)1OR#H+^IJPlP(cKO#ILHX<=%Y{aC9=ObQ?cst@Z5yvCrBS%Dzjm(PN8MzmY-n>Ci z4LW1inlsIhnYWprH=m2rL`{m?5cPP}M^PuEXGcF8{c-fE!REn32PX|4J9y&Y$%AJM zeqr!ygTEf!Jou*=biy+^Ks0NLu^AP4tZwC?jbi~vtz4c*Tgo&?uvaY z_EhZI*h_JyxcE3{TwUD8xSz)zjr-qtV|-Y=J-#HqGJZq+;rO%h%|k?C#h*f z@`zO<4vc8C-es+@F0sBp(m2vJvS#FqBmXh-N^*R1X|gBzt>hm@rHxuQ>f=#2QW8>D zrTjAG^5~(X7mWUOYFO%Bsk>7DI3{e&%rU#hyg%kkTeMBErP}PaxwdC)7i?E-En^j9 z4Pyt4jT$>_Z1LD9#-2-yOdFE6H0{N-YvX2)du!Z((nqCNrT;8_Px_JczmE?eZy#SV z{;~0&j=!7{l98M-H)BJ_`x$K$?w@dM!ezVJUTyz_{ridLiQ^|OoLD#U#fe``Y|9*) zS(*7v=84SzWJPA#vhL1$AZvHl?;T2q!?DKkr%8h+Et<4;((Xy0IrZ2Ow$Ay1^IG

&)#n|igtSddmwUa+&^{IrN^^QJvN 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%0A3S}~?vYHF>^ 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 diff --git a/sitegen/static/stylesheets/article.css b/sitegen/static/stylesheets/article.css deleted file mode 100644 index 4440427f..00000000 --- a/sitegen/static/stylesheets/article.css +++ /dev/null @@ -1,18 +0,0 @@ -.article-container { - display: flex; - justify-content: space-between; - margin-top: var(--navbar-height); -} - -.article-content { - margin: var(--content-padding); - max-width: var(--max-content-width); - width: 100%; - flex-grow: 1; -} - -.article-toc, -.article-nav { - background-color: blue; - width: 20rem; -} diff --git a/sitegen/static/stylesheets/common.css b/sitegen/static/stylesheets/common.css deleted file mode 100644 index c73695c2..00000000 --- a/sitegen/static/stylesheets/common.css +++ /dev/null @@ -1,136 +0,0 @@ -:root { - --prvdmwrong-hue: 240; - --prvdmwrong-chroma: 0.025; - --prvdmwrong-gray-0: oklch(0 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-1: oklch(0.05 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-2: oklch(0.1 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-3: oklch(0.15 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-4: oklch(0.2 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-5: oklch(0.3 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-6: oklch(0.8 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-7: oklch(0.85 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-8: oklch(0.9 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-9: oklch(0.95 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - --prvdmwrong-gray-10: oklch(1 var(--prvdmwrong-chroma) var(--prvdmwrong-hue)); - - --prvdmwrong-accent-hue: 50; - --prvdmwrong-accent-chroma: 0.15; - --prvdmwrong-accent: oklch(0.6 var(--prvdmwrong-accent-chroma) var(--prvdmwrong-accent-hue)); - --prvdmwrong-accent-dark: oklch(0.55 var(--prvdmwrong-accent-chroma) var(--prvdmwrong-accent-hue)); - --prvdmwrong-accent-darker: oklch(0.4 var(--prvdmwrong-accent-chroma) var(--prvdmwrong-accent-hue)); - --prvdmwrong-accent-light: oklch(0.65 var(--prvdmwrong-accent-chroma) var(--prvdmwrong-accent-hue)); - --prvdmwrong-accent-lighter: oklch(0.7 var(--prvdmwrong-accent-chroma) var(--prvdmwrong-accent-hue)); - - --fg: var(--prvdmwrong-gray-8); - --fg-light: var(--prvdmwrong-gray-7); - --fg-lighter: var(--prvdmwrong-gray-6); - --fg-lightest: var(--prvdmwrong-gray-5); - --bg: var(--prvdmwrong-gray-4); - --bg-light: var(--prvdmwrong-gray-3); - --bg-lighter: var(--prvdmwrong-gray-2); - --bg-lightest: var(--prvdmwrong-gray-1); - --accent: var(--prvdmwrong-accent); - - --content-padding: 2rem; - --max-content-width: 80rem; - --mobile-width: 80rem; - --current-content-width: max(var(--max-content-width), calc(100vw - var(--content-padding) - var(--content-padding))); - - --navbar-height: 4rem; -} - -body { - background: var(--bg); - color: var(--fg); -} - -body>* { - image-rendering: pixelated; -} - -header { - display: flex; - justify-content: center; - - --vertical-padding: max(2em, calc(30svh - 10em)); - - padding: var(--vertical-padding) 0; - padding-top: calc(var(--vertical-padding) + var(--navbar-height)); - - background-color: var(--bg-light); - border-bottom: 0.1rem solid var(--fg-lightest); -} - -header h1 { - font-size: 3rem; -} - -.navbar { - display: flex; - justify-content: center; - - position: fixed; - z-index: 9999; - top: 0; - height: var(--navbar-height); - width: 100%; - - background-color: var(--bg-light); - border-bottom: 0.1rem solid var(--fg-lightest); -} - -.navbar-inner { - display: flex; - align-items: center; - gap: 1rem; - - margin: 0 var(--content-padding); - max-width: var(--max-content-width); - height: 100%; - width: 100%; -} - -.navbar-inner :first-child { - margin-right: auto; -} - -.navbar-inner a { - color: var(--fg); - text-decoration: none; -} - -.button { - background-color: var(--fg); - color: var(--bg); - - padding: 0.5rem 1rem; - - border-radius: 0.25rem; - font-weight: 700; - text-decoration: none; -} - -.code-snippet { - /* white-space: pre-wrap; - word-wrap: break-word; - text-align: justify; */ - /* overflow: auto ; */ - /* max-width: var(--current-content-width); */ -} - -.code-snippet code { - - /* overflow-x: scroll; */ -} - -.hljs { - background-color: var(--bg-lightest) !important; - border: 0.1rem solid var(--fg-lightest); - border-radius: 0.5rem; - overflow-x: scroll !important; -} - -a { - color: var(--accent); - text-decoration: none; -} diff --git a/sitegen/static/stylesheets/fonts.css b/sitegen/static/stylesheets/fonts.css deleted file mode 100644 index 2925cae6..00000000 --- a/sitegen/static/stylesheets/fonts.css +++ /dev/null @@ -1,63 +0,0 @@ -@font-face { - font-family: 'Jura'; - src: url('../fonts/jura.ttf') format('truetype') -} - -* { - text-balance: pretty; -} - -body { - font-family: "Jura", system-ui; - line-height: 2; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: 700; - - &:not(:first-child) { - margin-top: 1rem; - } -} - -h1 { - font-size: 2em; - line-height: 1.5; -} - -h2 { - font-size: 1.5em; - line-height: 1.5; -} - -h3 { - font-size: 1.25em; - line-height: 1.5; -} - -h4, -h5, -h6, -strong, -b { - font-size: 1em; - line-height: 1.5; - letter-spacing: 0.125em; - text-shadow: 0.125em 0; -} - -u, -a { - text-decoration-thickness: 0.125em; - text-underline-offset: 0.125em; -} - -small, -pre { - font-size: 0.75rem; -} diff --git a/sitegen/static/stylesheets/landing.css b/sitegen/static/stylesheets/landing.css deleted file mode 100644 index 8b4b833e..00000000 --- a/sitegen/static/stylesheets/landing.css +++ /dev/null @@ -1,65 +0,0 @@ -.hero-inner { - display: flex; - flex-direction: column; - position: relative; - gap: 1rem; - width: 100%; - - padding: 0 var(--content-padding); - max-width: var(--max-content-width); -} - -.hero-lead { - flex: 1 1 auto; -} - -.hero-lead :not(:last-child) { - margin-bottom: 0.5rem; -} - -.hero-supports { - display: flex; - flex-direction: row; - gap: 1rem; -} - -.hero-supports div span { - font-weight: 700; - opacity: 50%; -} - -.hero-supports .hero-supports-icons { - display: flex; - gap: 0.5rem; -} - -.hero-supports .hero-supports-icons a { - width: 4rem; - height: 4rem; - background-color: red; -} - -@media only screen and (max-width: 50rem) { - .hero-supports { - flex-direction: column; - } -} - -.hero-left, -.hero-right { - display: flex; - flex-direction: column; - gap: 1rem; -} - - -.hero-buttons { - display: flex; - gap: 1rem; -} - -/* .hero-inner > section { - display: flex; - position: relative; - max-width: 100%; -} */ diff --git a/sitegen/static/stylesheets/reset.css b/sitegen/static/stylesheets/reset.css deleted file mode 100644 index 7e547adb..00000000 --- a/sitegen/static/stylesheets/reset.css +++ /dev/null @@ -1,47 +0,0 @@ -/* - Josh's Custom CSS Reset - https://www.joshwcomeau.com/css/custom-css-reset/ -*/ - -*, *::before, *::after { - box-sizing: border-box; -} - -* { - margin: 0; -} - -@media (prefers-reduced-motion: no-preference) { - html { - interpolate-size: allow-keywords; - } -} - -body { - line-height: 1.5; - -webkit-font-smoothing: antialiased; -} - -img, picture, video, canvas, svg { - display: block; - max-width: 100%; -} - -input, button, textarea, select { - font: inherit; -} - -p, h1, h2, h3, h4, h5, h6 { - overflow-wrap: break-word; -} - -p { - text-wrap: pretty; -} -h1, h2, h3, h4, h5, h6 { - text-wrap: balance; -} - -#root, #__next { - isolation: isolate; -} \ No newline at end of file diff --git a/sitegen/utils/for-each.luau b/sitegen/utils/for-each.luau deleted file mode 100644 index c38c62f0..00000000 --- a/sitegen/utils/for-each.luau +++ /dev/null @@ -1,14 +0,0 @@ -local function forEach(input: { [KI]: VI }, func: (KI, VI) -> (KO, VO)): { [KO]: VO } - local output = {} - for keyIn, valueIn in input do - local keyOut, valueOut = func(keyIn, valueIn) - if keyOut == nil or valueOut == nil then - continue - end - assert(output[keyOut] == nil, "Key collision") - output[keyOut] = valueOut - end - return output -end - -return forEach diff --git a/sitegen/utils/site-base-url.luau b/sitegen/utils/site-base-url.luau deleted file mode 100644 index 08b357df..00000000 --- a/sitegen/utils/site-base-url.luau +++ /dev/null @@ -1,7 +0,0 @@ -local siteUrls = require("@sitegen/config/site-urls") - -local function siteBaseUrl(suffix: string) - return siteUrls.base .. "/" .. suffix -end - -return siteBaseUrl diff --git a/stylua.toml b/stylua.toml deleted file mode 100644 index 77fa854a..00000000 --- a/stylua.toml +++ /dev/null @@ -1,4 +0,0 @@ -syntax = "Luau" - -[sort_requires] - enabled = true diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 2d3ebeb1..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "downlevelIteration": true, - "module": "commonjs", - "moduleResolution": "Node", - "noLib": true, - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "experimentalDecorators": true, - "strict": true, - "target": "ESNext", - "typeRoots": [ - "node_modules/@rbxts" - ], - // i dont care - "jsx": "react", - "jsxFactory": "Roact.createElement", - "jsxFragmentFactory": "Roact.Fragment", - "rootDir": "packages", - "outDir": "out", - "baseUrl": "packages", - "incremental": true, - "tsBuildInfoFile": "out/tsconfig.tsbuildinfo", - "declaration": true - } -} diff --git a/.lune/lib/publish/init.luau b/typecheckers/init.luau similarity index 100% rename from .lune/lib/publish/init.luau rename to typecheckers/init.luau diff --git a/types/g.d.luau b/types/g.d.luau deleted file mode 100644 index edfb7af3..00000000 --- a/types/g.d.luau +++ /dev/null @@ -1,5 +0,0 @@ -declare _G: { - PRVDMWRONG_SUPPRESS_MULTIPLE_SAME_TAG: unknown, - PRVDMWRONG_DISALLOW_MULTIPLE_LISTENERS: unknown, - PRVDMWRONG_PROFILE_LIFECYCLES: unknown -} From 24ee0cbfcaa871fb07996b540a813990fdcd7303 Mon Sep 17 00:00:00 2001 From: znotfireman Date: Wed, 10 Jun 2026 16:05:48 +0700 Subject: [PATCH 2/2] chore: import all wth lute scripts for now --- .config.luau | 12 - .lute/.config.luau | 15 + .lute/aliases.luau | 24 + .lute/batteries/base64.luau | 142 ++ .lute/batteries/cli.luau | 233 +++ .lute/batteries/collections/deque.luau | 67 + .lute/batteries/difftext/init.luau | 19 + .lute/batteries/difftext/myersdiff.luau | 143 ++ .lute/batteries/difftext/printdiff.luau | 218 +++ .lute/batteries/difftext/types.luau | 14 + .lute/batteries/glob.luau | 221 +++ .lute/batteries/pp.luau | 187 ++ .lute/batteries/result.luau | 36 + .lute/batteries/richterm.luau | 100 ++ .lute/batteries/toml.luau | 1511 +++++++++++++++++ .lute/dev.luau | 162 ++ .lute/libs/build/buildRojoProject.luau | 73 + .lute/libs/build/initializeOutput.luau | 16 + .lute/libs/build/initializeRojo.luau | 11 + .lute/libs/build/shouldFileBeTranspiled.luau | 13 + .../build/transformers/resolveGlobals.luau | 20 + .../build/transformers/resolveRequires.luau | 36 + .lute/libs/build/transpile.luau | 35 + .lute/libs/cli.luau | 247 +++ .lute/libs/copyInto.luau | 25 + .lute/libs/emptyDir.luau | 15 + .lute/libs/findCommentRegion.luau | 5 + .lute/libs/log.luau | 36 + .lute/libs/monorepo/getMemberFromPath.luau | 14 + .lute/libs/monorepo/useMonorepo.luau | 73 + .lute/libs/monorepo/usePlaceDependencies.luau | 49 + .lute/libs/monorepo/useRepositoryConfig.luau | 11 + .lute/libs/run.luau | 42 + .lute/libs/sourcemap/sanitizeQuotes.luau | 7 + .lute/libs/sourcemap/useSourcemapIndices.luau | 55 + .lute/libs/sourcemap/useSourcemapWatcher.luau | 48 + .lute/libs/types.luau | 115 ++ .lute/libs/ui/banner.luau | 17 + .lute/libs/ui/divider.luau | 21 + .lute/ripple.luau | 19 + .lute/ropen.luau | 24 + rokit.toml | 11 + 42 files changed, 4130 insertions(+), 12 deletions(-) delete mode 100644 .config.luau create mode 100644 .lute/.config.luau create mode 100644 .lute/aliases.luau create mode 100644 .lute/batteries/base64.luau create mode 100644 .lute/batteries/cli.luau create mode 100644 .lute/batteries/collections/deque.luau create mode 100644 .lute/batteries/difftext/init.luau create mode 100644 .lute/batteries/difftext/myersdiff.luau create mode 100644 .lute/batteries/difftext/printdiff.luau create mode 100644 .lute/batteries/difftext/types.luau create mode 100644 .lute/batteries/glob.luau create mode 100644 .lute/batteries/pp.luau create mode 100644 .lute/batteries/result.luau create mode 100644 .lute/batteries/richterm.luau create mode 100644 .lute/batteries/toml.luau create mode 100644 .lute/dev.luau create mode 100644 .lute/libs/build/buildRojoProject.luau create mode 100644 .lute/libs/build/initializeOutput.luau create mode 100644 .lute/libs/build/initializeRojo.luau create mode 100644 .lute/libs/build/shouldFileBeTranspiled.luau create mode 100644 .lute/libs/build/transformers/resolveGlobals.luau create mode 100644 .lute/libs/build/transformers/resolveRequires.luau create mode 100644 .lute/libs/build/transpile.luau create mode 100644 .lute/libs/cli.luau create mode 100644 .lute/libs/copyInto.luau create mode 100644 .lute/libs/emptyDir.luau create mode 100644 .lute/libs/findCommentRegion.luau create mode 100644 .lute/libs/log.luau create mode 100644 .lute/libs/monorepo/getMemberFromPath.luau create mode 100644 .lute/libs/monorepo/useMonorepo.luau create mode 100644 .lute/libs/monorepo/usePlaceDependencies.luau create mode 100644 .lute/libs/monorepo/useRepositoryConfig.luau create mode 100644 .lute/libs/run.luau create mode 100644 .lute/libs/sourcemap/sanitizeQuotes.luau create mode 100644 .lute/libs/sourcemap/useSourcemapIndices.luau create mode 100644 .lute/libs/sourcemap/useSourcemapWatcher.luau create mode 100644 .lute/libs/types.luau create mode 100644 .lute/libs/ui/banner.luau create mode 100644 .lute/libs/ui/divider.luau create mode 100644 .lute/ripple.luau create mode 100644 .lute/ropen.luau create mode 100644 rokit.toml diff --git a/.config.luau b/.config.luau deleted file mode 100644 index dfddbbb7..00000000 --- a/.config.luau +++ /dev/null @@ -1,12 +0,0 @@ -return { - wth = { - placeMixin = { - transpile = true, - folderName = "Prvd", - rojo = { - { name = "ReplicatedStorage" }, - { name = "Packages", className = "Folder" }, - }, - }, - }, -} diff --git a/.lute/.config.luau b/.lute/.config.luau new file mode 100644 index 00000000..ba0f53a7 --- /dev/null +++ b/.lute/.config.luau @@ -0,0 +1,15 @@ +return { + luau = { + aliases = { + -- Lute + std = "~/.lute/typedefs/1.0.0/std", + lute = "~/.lute/typedefs/1.0.0/lute", + lint = "~/.lute/typedefs/1.0.0/lint", + -- Lute @batteries + batteries = "./batteries", + -- Welcome To Hell + libs = "../libs", + scripts = ".", + }, + }, +} diff --git a/.lute/aliases.luau b/.lute/aliases.luau new file mode 100644 index 00000000..8084451d --- /dev/null +++ b/.lute/aliases.luau @@ -0,0 +1,24 @@ +local findCommentRegion = require "@scripts/libs/findCommentRegion" +local fs = require "@std/fs" +local json = require "@std/json" +local path = require "@std/path" +local pp = require "@batteries/pp" +local run = require "@scripts/libs/run" +local useMonorepo = require "@scripts/libs/monorepo/useMonorepo" + +local monorepo = useMonorepo() + +local luauAliases = {} +for _, member in ipairs(monorepo) do + luauAliases[member.dirName] = path.format(member.dirPath) +end + +local configLuau = fs.readFileToString ".config.luau" +local aliasesStart, aliasesEnd = findCommentRegion(configLuau, "aliases") + +configLuau = string.sub(configLuau, 1, assert(aliasesStart) - 1) + .. `-- #region aliases\nlocal aliases = {pp(luauAliases)}\n-- #endregion` + .. string.sub(configLuau, assert(aliasesEnd) + 1) + +fs.writeStringToFile(".config.luau", configLuau) +run("stylua", { ".config.luau" }) diff --git a/.lute/batteries/base64.luau b/.lute/batteries/base64.luau new file mode 100644 index 00000000..61c5cd88 --- /dev/null +++ b/.lute/batteries/base64.luau @@ -0,0 +1,142 @@ +--!optimize 2 +--!strict + +local BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" +local BASE64_ENCODING_LUT = table.create(4096) :: { number } +local BASE64_DECODING_LUT = buffer.create(256) + +do + for i = 0, 4095 do + local hi = bit32.rshift(i, 6) + 1 + local lo = bit32.band(i, 0x3F) + 1 + BASE64_ENCODING_LUT[i + 1] = + bit32.bor(string.byte(BASE64_ALPHABET, hi), bit32.lshift(string.byte(BASE64_ALPHABET, lo), 8)) + end + + -- prefill lookup table with invalid base64 value (0xFF) + buffer.fill(BASE64_DECODING_LUT, 0, 0xFF) + for i = 1, #BASE64_ALPHABET do + buffer.writeu8(BASE64_DECODING_LUT, string.byte(BASE64_ALPHABET, i), i - 1) + end +end + +@native +local function encode(input_buffer: buffer): buffer + assert(typeof(input_buffer) == "buffer", "Expected input to be a buffer") + + local input_length = buffer.len(input_buffer) + + if input_length == 0 then + return buffer.create(0) + end + + local output = buffer.create(((input_length + 2) // 3) * 4) + local output_idx = 0 + local i = 0 + + while i + 3 <= input_length do + local triple = bit32.bor( + bit32.lshift(buffer.readu8(input_buffer, i), 16), + bit32.lshift(buffer.readu8(input_buffer, i + 1), 8), + buffer.readu8(input_buffer, i + 2) + ) + + local high = bit32.band(bit32.rshift(triple, 12), 0xFFF) + 1 + local low = bit32.band(triple, 0xFFF) + 1 + + local pair0 = BASE64_ENCODING_LUT[high] + local pair1 = BASE64_ENCODING_LUT[low] + + buffer.writeu32(output, output_idx, bit32.bor(pair0, bit32.lshift(pair1, 16))) + + i += 3 + output_idx += 4 + end + + local rem = input_length - i + + if rem == 1 then + local high = bit32.band(bit32.lshift(buffer.readu8(input_buffer, i), 4), 0xFF0) + + local TWO_EQUALS = 0x3D3D + buffer.writeu32(output, output_idx, bit32.bor(BASE64_ENCODING_LUT[high + 1], bit32.lshift(TWO_EQUALS, 16))) + elseif rem == 2 then + local first = buffer.readu8(input_buffer, i) + local second = buffer.readu8(input_buffer, i + 1) + local high = bit32.bor(bit32.lshift(first, 4), bit32.rshift(second, 4)) + local low_idx = bit32.lshift(bit32.band(second, 0x0F), 2) + local low_equals = bit32.bor(string.byte(BASE64_ALPHABET, low_idx + 1), bit32.lshift(0x3D, 8)) + + buffer.writeu32(output, output_idx, bit32.bor(BASE64_ENCODING_LUT[high + 1], bit32.lshift(low_equals, 16))) + end + + return output +end + +@native +local function decode(input_buffer: buffer): buffer + assert(typeof(input_buffer) == "buffer", "Expected input to be a buffer") + + local input_length = buffer.len(input_buffer) + + if input_length == 0 then + return buffer.create(0) + end + + -- strip padding (rfc-4648 section 3.3: the excess pad characters MAY also be ignored) + while input_length > 0 and buffer.readu8(input_buffer, input_length - 1) == 0x3D do + input_length -= 1 + end + + -- rfc-4648 section 3.3 forbids padding that isn't preceded by at least one Base64 digit + if input_length == 0 then + error("Invalid base64 input", 2) + end + + -- get correct output size + local output_length = (3 * input_length) // 4 + local output = buffer.create(output_length) + + local read_offset = 0 + local write_offset = 0 + -- loop invariant: at least 4 bytes to write + while write_offset + 4 <= output_length do + local b4 = buffer.readu8(BASE64_DECODING_LUT, buffer.readu8(input_buffer, read_offset + 3)) + local b3 = buffer.readu8(BASE64_DECODING_LUT, buffer.readu8(input_buffer, read_offset + 2)) + local b2 = buffer.readu8(BASE64_DECODING_LUT, buffer.readu8(input_buffer, read_offset + 1)) + local b1 = buffer.readu8(BASE64_DECODING_LUT, buffer.readu8(input_buffer, read_offset)) + if bit32.bor(b1, b2, b3, b4) >= 64 then + error("Invalid base64 input", 2) + end + read_offset += 4 + -- u32 BE: [B1, B2, B3, 0] = b1<<26|b2<<20|b3<<14|b4<<8, trailing 0 will be overwritten next iteration + buffer.writeu32(output, write_offset, bit32.byteswap(b1 * 0x4000000 + b2 * 0x100000 + b3 * 0x4000 + b4 * 0x100)) + write_offset += 3 + end + + local u24be, nbits = 0, 0 + while read_offset < input_length do + local b = buffer.readu8(BASE64_DECODING_LUT, buffer.readu8(input_buffer, read_offset)) + read_offset += 1 + if b >= 64 then + error("Invalid base64 input", 2) + end + u24be = u24be * 0x40 + b + nbits += 6 + end + while nbits >= 8 do + buffer.writeu8(output, write_offset, bit32.rshift(u24be, nbits - 8)) + nbits -= 8 + write_offset += 1 + end + -- 2 or 4 leftover bits must be zero + if nbits == 6 or (nbits == 2 and bit32.btest(u24be, 0x03)) or (nbits == 4 and bit32.btest(u24be, 0x0F)) then + error("Invalid base64 input", 2) + end + return output +end + +return table.freeze { + encode = encode, + decode = decode, +} diff --git a/.lute/batteries/cli.luau b/.lute/batteries/cli.luau new file mode 100644 index 00000000..b06af7d3 --- /dev/null +++ b/.lute/batteries/cli.luau @@ -0,0 +1,233 @@ +local cli = {} +cli.__index = cli + +type ArgKind = "positional" | "flag" | "option" | "variadic" +type ArgOptions = { + help: string?, + aliases: { string }?, + default: string?, + required: boolean?, + hidden: boolean?, +} + +type ArgData = { + name: string, + kind: ArgKind, + options: ArgOptions, +} + +type ParseResult = { + values: { [string]: string? }, + flags: { [string]: boolean }, + variadics: { string }, + fwdArgs: { string }, +} + +type ParserData = { + arguments: { [number]: ArgData }, + positional: { [number]: ArgData }, + variadicArg: ArgData?, + parsed: ParseResult, +} + +type ParserInterface = typeof(cli) +export type Parser = setmetatable + +function cli.parser(): Parser + local self = { + arguments = {}, + positional = {}, + variadicArg = nil :: ArgData?, + parsed = { values = {}, flags = {}, variadics = {}, fwdArgs = {} }, + } + + return setmetatable(self, cli) +end + +function cli.add(self: Parser, name: string, kind: ArgKind, options: ArgOptions): () + local argument: ArgData = { + name = name, + kind = kind, + options = options or { aliases = {}, required = false }, + } + + table.insert(self.arguments, argument) + if kind == "positional" then + table.insert(self.positional, argument) + elseif kind == "variadic" then + self.variadicArg = argument + end +end + +function cli.parse(self: Parser, args: { string }): () + local i = 0 + local pos_index = 1 + + while i < #args do + i += 1 + + local arg = args[i] + + -- if the argument is exactly "--", we pass everything along + if arg == "--" then + table.move(args, i + 1, #args, #self.parsed.fwdArgs + 1, self.parsed.fwdArgs) + break + end + + -- if the argument starts with two dashes, we're parsing either a flag or an option + if string.sub(arg, 1, 2) == "--" then + local name = string.sub(arg, 3) + local found = false + + for _, argument in self.arguments do + local aliases = argument.options.aliases or {} + + if argument.name == name or table.find(aliases, name) then + found = true + + if argument.kind == "option" then + -- advance past the argument + i += 1 + + assert(i <= #args, "Missing value for argument: " .. argument.name) + self.parsed.values[argument.name] = args[i] + + break + end + + self.parsed.flags[argument.name] = true + break + end + end + + assert(found, "Unknown argument: " .. name) + continue + end + + -- if the argument starts with a single dash, we're parsing a flag + if string.sub(arg, 1, 1) == "-" then + local flags = string.sub(arg, 2) + + for j = 1, #flags do + local name = string.sub(flags, j, j) + local found = false + for _, argument in self.arguments do + local aliases = argument.options.aliases or {} + if argument.name == name or table.find(aliases, name) then + found = true + if argument.kind == "option" then + i += 1 + assert(i <= #args, "Missing value for argument: " .. argument.name) + self.parsed.values[argument.name] = args[i] + else + self.parsed.flags[argument.name] = true + end + break + end + end + + assert(found, "Unknown argument: " .. name) + end + + continue + end + + -- if we have positional arguments left, we can take this argument as one + if pos_index <= #self.positional then + self.parsed.values[self.positional[pos_index].name] = arg + pos_index += 1 + continue + end + + -- if we have a variadic argument, we can take this argument as part of it + if self.variadicArg then + table.insert(self.parsed.variadics, arg) + continue + end + + -- otherwise, the argument is forwarded on + table.insert(self.parsed.fwdArgs, arg) + end + + -- check that all required arguments are present, and set any default values as needed + for _, argument in self.arguments do + if argument.options.required then + if argument.kind == "variadic" then + assert(#self.parsed.variadics > 0, "Missing required variadic argument: " .. argument.name) + else + assert(self.parsed.values[argument.name], "Missing required argument: " .. argument.name) + end + end + + if self.parsed.values[argument.name] == nil and argument.options.default then + self.parsed.values[argument.name] = argument.options.default + end + end +end + +function cli.get(self: Parser, name: string): string? + return self.parsed.values[name] +end + +function cli.has(self: Parser, name: string): boolean + return self.parsed.flags[name] ~= nil +end + +function cli.variadics(self: Parser): { string } + return self.parsed.variadics +end + +function cli.forwarded(self: Parser): { string }? + return self.parsed.fwdArgs +end + +function cli.usage(self: Parser, name: string): string + local parts = { name } + + for _, arg in self.positional do + if not arg.options.hidden then + if arg.options.required then + table.insert(parts, `<{arg.name}>`) + else + table.insert(parts, `[{arg.name}]`) + end + end + end + + for _, arg in self.arguments do + if not arg.options.hidden and arg.kind ~= "positional" and arg.kind ~= "variadic" then + table.insert(parts, "[options]") + break + end + end + + if self.variadicArg and not self.variadicArg.options.hidden then + local v = self.variadicArg + if v.options.required then + table.insert(parts, `<{v.name}...>`) + else + table.insert(parts, `[{v.name}...]`) + end + end + + return table.concat(parts, " ") +end + +function cli.help(self: Parser, formatter: ((s: string) -> string)?): () + local fmt = formatter or function(s) + return s + end + + print(fmt "Usage:") + for _, argument in self.arguments do + if argument.options.hidden then + continue + end + + local aliasStr = table.concat(argument.options.aliases or {}, ", ") + local reqStr = if argument.options.required then "(required) " else "" + print(fmt(string.format(" --%s (-%s) - %s%s", argument.name, aliasStr, reqStr, argument.options.help or ""))) + end +end + +return table.freeze(cli) diff --git a/.lute/batteries/collections/deque.luau b/.lute/batteries/collections/deque.luau new file mode 100644 index 00000000..997b956a --- /dev/null +++ b/.lute/batteries/collections/deque.luau @@ -0,0 +1,67 @@ +type DequeData = { + _head: number, + _tail: number, + _values: { [number]: T }, +} + +local deque = {} + +export type Deque = setmetatable, typeof(deque)> + +deque.__index = deque +deque.__len = function(self: Deque) + return self._tail - self._head + 1 +end + +local dequeLib = {} + +function dequeLib.new(initValue: T?): Deque + local self = {} :: Deque + self._values = {} + self._head, self._tail = 0, if initValue then 0 else -1 + if initValue then + self._values[self._head] = initValue + end + + return setmetatable(self, deque) +end + +function deque.pushfront(self: Deque, value: T) + self._head -= 1 + self._values[self._head] = value +end + +function deque.pushback(self: Deque, value: T) + self._tail += 1 + self._values[self._tail] = value +end + +function deque.popfront(self: Deque): T + if self._tail < self._head then + error "Popping from empty deque" + end + local toReturn = self._values[self._head] + self._values[self._head] = nil + self._head += 1 + return toReturn +end + +function deque.popback(self: Deque): T + if self._tail < self._head then + error "Popping from empty deque" + end + local toReturn = self._values[self._tail] + self._values[self._tail] = nil + self._tail -= 1 + return toReturn +end + +function deque.peekfront(self: Deque) + return self._values[self._head] +end + +function deque.peekback(self: Deque) + return self._values[self._tail] +end + +return table.freeze(dequeLib) diff --git a/.lute/batteries/difftext/init.luau b/.lute/batteries/difftext/init.luau new file mode 100644 index 00000000..75bef212 --- /dev/null +++ b/.lute/batteries/difftext/init.luau @@ -0,0 +1,19 @@ +local myersdiff = require "@self/myersdiff" +local printdiff = require "@self/printdiff" +local types = require "@self/types" + +export type diff = types.diff +export type diffoptions = types.diffoptions + +local function diff(a: string, b: string, options: diffoptions): diff + if options and options.byChar then + return myersdiff.myersdiffbychar(a, b) + else + return myersdiff.myersdiffbyline(a, b) + end +end + +return { + diff = diff, + prettydiff = printdiff, +} diff --git a/.lute/batteries/difftext/myersdiff.luau b/.lute/batteries/difftext/myersdiff.luau new file mode 100644 index 00000000..48d0a946 --- /dev/null +++ b/.lute/batteries/difftext/myersdiff.luau @@ -0,0 +1,143 @@ +local deque = require "@batteries/collections/deque" +local tableext = require "@std/tableext" +local types = require "./types" + +type diffoperation = types.diffoperation +type diff = types.diff + +type EditGraphNode = { + x: number, + y: number, + prev: EditGraphNode?, +} + +local function editGraphNode(x: number, y: number, prev: EditGraphNode?): EditGraphNode + return { + x = x, + y = y, + prev = prev, + } +end + +-- true if a[x+1] == b[y+1]; indicates an EQUAL operation (no diff) is valid +local function hasDiagonalEdge(node: EditGraphNode, a: string | { string }, b: string | { string }): boolean + local x, y = node.x, node.y + if typeof(a) == "table" then + if typeof(b) == "table" then + return x < #a and y < #b and a[x + 1] == b[y + 1] + else + error "hasDiagonalEdge inputs should have the same type." + end + elseif typeof(b) == "table" then + error "hasDiagonalEdge inputs should have the same type." + end + + return x < #a and y < #b and a:sub(x + 1, x + 1) == b:sub(y + 1, y + 1) +end + +local function edgeTodiff(curNode: EditGraphNode, a: string | { string }, b: string | { string }): diffoperation? + -- maps stepping from curNode.prev -> curNode to a diff operation + -- (n-1, n) -> (n, n) == DELETION of a[n] + -- (n, n-1) -> (n, n) == ADDITION of b[n] + -- (n-1, n-1) -> (n, n) == EQUAL (a[n] == b[n]) + if not curNode.prev then + return nil + end + + local prev = curNode.prev + local xdiff = curNode.x - prev.x + local ydiff = curNode.y - prev.y + if xdiff == 1 and ydiff == 1 then + return { + key = "EQUAL", + text = if typeof(a) == "table" then a[curNode.x] else a:sub(curNode.x, curNode.x), + } + elseif xdiff == 1 then + return { + key = "DELETE", + text = if typeof(a) == "table" then a[curNode.x] else a:sub(curNode.x, curNode.x), + } + else + return { + key = "ADD", + text = if typeof(b) == "table" then b[curNode.y] else b:sub(curNode.y, curNode.y), + } + end +end + +local function myersdiff(a: string | { string }, b: string | { string }): diff + local start = editGraphNode(0, 0) + local editGraphDeque = deque.new(start) + + local diff = {} :: diff + local seen = {} :: { [string]: true } + seen["0,0"] = true + + while #editGraphDeque do + local curNode = editGraphDeque:popfront() + + -- we've reached bottom right vertex; indicates full edit from a -> b + if curNode.x == #a and curNode.y == #b then + -- reconstruct diff operations by tracing path from termination node to start + local edgeOp = edgeTodiff(curNode, a, b) + while edgeOp do + table.insert(diff, edgeOp) + curNode = curNode.prev + edgeOp = if curNode then edgeTodiff(curNode, a, b) else nil + end + break + end + + -- add neighbors (diag prioritzed, then deletion, then insertion) + if hasDiagonalEdge(curNode, a, b) then + -- algorithm optimizes for diagonal edges since they represent no diff. We want the shortest-edit-sequence (least # of diff operations) + -- so diagonal edges representing equality in a[n+1] & b[n+1] is always preferred + local edgePositionStr = `{curNode.x + 1},{curNode.y + 1}` + if not seen[edgePositionStr] then + seen[edgePositionStr] = true + editGraphDeque:pushfront(editGraphNode(curNode.x + 1, curNode.y + 1, curNode)) + end + continue + end + + if curNode.x < #a then + local edgePositionStr = `{curNode.x + 1},{curNode.y}` + if not seen[edgePositionStr] then + seen[edgePositionStr] = true + editGraphDeque:pushback(editGraphNode(curNode.x + 1, curNode.y, curNode)) + end + end + + if curNode.y < #b then + local edgePositionStr = `{curNode.x},{curNode.y + 1}` + if not seen[edgePositionStr] then + seen[edgePositionStr] = true + editGraphDeque:pushback(editGraphNode(curNode.x, curNode.y + 1, curNode)) + end + end + end + + tableext.reverse(diff, true) + return diff +end + +local function myersdiffbyline(a: string | { string }, b: string | { string }): diff + local src = a + local dest = b + if typeof(a) == "string" then + src = a:split "\n" + end + if typeof(b) == "string" then + dest = b:split "\n" + end + return myersdiff(src, dest) +end + +local function myersdiffbychar(a: string, b: string): diff + return myersdiff(a, b) +end + +return table.freeze { + myersdiffbyline = myersdiffbyline, + myersdiffbychar = myersdiffbychar, +} diff --git a/.lute/batteries/difftext/printdiff.luau b/.lute/batteries/difftext/printdiff.luau new file mode 100644 index 00000000..01889959 --- /dev/null +++ b/.lute/batteries/difftext/printdiff.luau @@ -0,0 +1,218 @@ +local myersdiff = require "./myersdiff" +local richterm = require "@batteries/richterm" +local myersdiffbychar = myersdiff.myersdiffbychar +local myersdiffbyline = myersdiff.myersdiffbyline +local types = require "./types" +local brightGreen = richterm.brightGreen +local brightRed = richterm.brightRed +local bgGreen = richterm.bgGreen +local bgRed = richterm.bgRed + +type diff = types.diff + +-- Collects consecutive DELETEs and/or ADDs starting at index i +-- Returns: deletes array, adds array, new index position +local function collectConsecutiveChanges(diff: diff, startIndex: number): ({ string }, { string }, number) + local i = startIndex + local deletes = {} + while i <= #diff and diff[i].key == "DELETE" do + table.insert(deletes, diff[i].text) + i += 1 + end + + local adds = {} + while i <= #diff and diff[i].key == "ADD" do + table.insert(adds, diff[i].text) + i += 1 + end + + return deletes, adds, i +end + +local function visualizeCharDiff(a: string, b: string): (string, string) + local charOps = myersdiffbychar(a, b) + -- diffs two strings by char and returns colored visual for src and destination text + local srcVisual = {} + local destVisual = {} + + for _, op in charOps do + if op.key == "EQUAL" then + table.insert(srcVisual, brightRed(op.text)) + table.insert(destVisual, brightGreen(op.text)) + elseif op.key == "DELETE" then + table.insert(srcVisual, bgRed(op.text)) + elseif op.key == "ADD" then + table.insert(destVisual, bgGreen(op.text)) + end + end + + return table.concat(srcVisual, ""), table.concat(destVisual, "") +end + +local function formatLineSideHeader( + operation: types.diffoperationkey, + maxNumWidth: number, + lineNumbers: { + oldLine: number?, + newLine: number?, + } +): string + -- side header structure: + -- if line numbers included: + -- ALWAYS has length maxNumWidth*2 + 4 + -- the padded structure is essentialy: + -- {operation} {oldLine# padded to len of maxNumWidth} {newLine# padded to len = maxNumWidth}| + + local oldStr = tostring(if lineNumbers then lineNumbers.oldLine else "") + local newStr = tostring(if lineNumbers then lineNumbers.newLine else "") + maxNumWidth = maxNumWidth or 1 + if operation == "EQUAL" then + return string.format(` %{maxNumWidth}s %{maxNumWidth}s| ` :: any, oldStr, newStr) + elseif operation == "ADD" then + return string.format(`+ %{maxNumWidth}s %{maxNumWidth}s| ` :: any, "", newStr) + elseif operation == "DELETE" then + return string.format(`- %{maxNumWidth}s %{maxNumWidth}s| ` :: any, oldStr, "") + end + + error(`formatLineSideHeader called with invalid diff operation key: {operation}`) +end + +local function printDiffByLineDetailed(a: string, b: string, includeLineNumbers: boolean?): string + local src, dest = a:split "\n", b:split "\n" + local maxNumLines = math.max(#src, #dest) + local maxLineNumberLen = math.floor(math.log10(maxNumLines)) + 1 + local diff = myersdiffbyline(src, dest) + + local i = 1 + local result: { string } = {} + local oldLine, newLine = 1, 1 + + -- Helper to format line numbers + local function lineNums(old: number?, new: number?) + return { oldLine = old, newLine = new } + end + + while i <= #diff do + local op = diff[i] + + if op.key == "DELETE" or op.key == "ADD" then + local deletes, adds + deletes, adds, i = collectConsecutiveChanges(diff, i) + local pair = #deletes == 1 and #adds == 1 + if pair then + local srcLine, destLine = visualizeCharDiff(deletes[1], adds[1]) + if includeLineNumbers then + table.insert( + result, + brightRed(formatLineSideHeader("DELETE", maxLineNumberLen, lineNums(oldLine, nil))) .. srcLine + ) + table.insert( + result, + brightGreen(formatLineSideHeader("ADD", maxLineNumberLen, lineNums(nil, newLine))) .. destLine + ) + oldLine, newLine = oldLine + 1, newLine + 1 + else + table.insert(result, brightRed "- " .. srcLine) + table.insert(result, brightGreen "+ " .. destLine) + end + else + for _, deleted in deletes do + if includeLineNumbers then + table.insert( + result, + brightRed( + formatLineSideHeader("DELETE", maxLineNumberLen, lineNums(oldLine, nil)) .. deleted + ) + ) + oldLine += 1 + else + table.insert(result, brightRed("- " .. deleted)) + end + end + for _, added in adds do + if includeLineNumbers then + table.insert( + result, + brightGreen(formatLineSideHeader("ADD", maxLineNumberLen, lineNums(nil, newLine)) .. added) + ) + newLine += 1 + else + table.insert(result, brightGreen("+ " .. added)) + end + end + end + else -- EQUAL + table.insert( + result, + if includeLineNumbers + then formatLineSideHeader("EQUAL", maxLineNumberLen, lineNums(oldLine, newLine)) .. op.text + else " " .. op.text + ) + oldLine, newLine = oldLine + 1, newLine + 1 + i += 1 + end + end + return table.concat(result, "\n") +end + +local function prettydiff( + a: string, + b: string, + options: { + detailed: boolean?, + includeLineNumbers: boolean?, + }? +): string + if options and options.detailed then + return printDiffByLineDetailed(a, b, options.includeLineNumbers) + end + + local result = {} :: { string } + local src, dest = a:split "\n", b:split "\n" + local diff = myersdiffbyline(src, dest) + if options and options.includeLineNumbers then + -- Helper to format line number tables so we don't get too verbose + local function lineNums(old: number?, new: number?) + return { oldLine = old, newLine = new } + end + + local maxNumLines = math.max(#src, #dest) + local maxLineNumberLen = math.floor(math.log10(maxNumLines)) + 1 + local oldLine, newLine = 1, 1 + + for _, op in diff do + if op.key == "ADD" then + table.insert( + result, + brightGreen(formatLineSideHeader(op.key, maxLineNumberLen, lineNums(nil, newLine)) .. op.text) + ) + newLine += 1 + elseif op.key == "DELETE" then + table.insert( + result, + brightRed(formatLineSideHeader(op.key, maxLineNumberLen, lineNums(oldLine, nil)) .. op.text) + ) + oldLine += 1 + else -- EQUAL + table.insert( + result, + formatLineSideHeader(op.key, maxLineNumberLen, lineNums(oldLine, newLine)) .. op.text + ) + oldLine, newLine = oldLine + 1, newLine + 1 + end + end + else + for _, op in diff do + if op.key == "ADD" then + table.insert(result, brightGreen("+ " .. op.text)) + elseif op.key == "DELETE" then + table.insert(result, brightRed("- " .. op.text)) + else -- EQUAL + table.insert(result, " " .. op.text) + end + end + end + return table.concat(result, "\n") +end + +return prettydiff diff --git a/.lute/batteries/difftext/types.luau b/.lute/batteries/difftext/types.luau new file mode 100644 index 00000000..19784a44 --- /dev/null +++ b/.lute/batteries/difftext/types.luau @@ -0,0 +1,14 @@ +export type diffoperationkey = "EQUAL" | "ADD" | "DELETE" + +export type diffoperation = { + key: diffoperationkey, + text: string, +} + +export type diff = { diffoperation } + +export type diffoptions = { + byChar: boolean?, +}? + +return table.freeze {} diff --git a/.lute/batteries/glob.luau b/.lute/batteries/glob.luau new file mode 100644 index 00000000..de005e6e --- /dev/null +++ b/.lute/batteries/glob.luau @@ -0,0 +1,221 @@ +--[[ + Glob pattern matching and filesystem discovery. + + `glob.match(pattern, input)` tests whether a path matches a glob pattern. + `glob.discover(pattern)` walks the filesystem returning all matching `Path`s. + + The implementation follows the Rust glob crate. The rules are: + + - `?` matches any single character (not `/`) + - `*` matches any (possibly empty) sequence of characters (not `/`) + - `**` matches the current directory and arbitrary subdirectories; it must + form an entire path component on its own (e.g. `a/**/b` is valid, but + `a**b` is not) + - `[...]` matches any character inside the brackets; ranges like `[a-z]` + are supported, ordered by Unicode code point + - `[!...]` matches any character NOT inside the brackets + - Metacharacters can be matched literally by wrapping them in brackets, + e.g. `[?]` matches a literal `?`, `[*]` matches a literal `*` +]] +local fs = require "@std/fs" +local path = require "@std/path" + +local function matchesSegment(pattern: string, name: string, patternStart: number?, nameStart: number?): boolean + local patternIndex = patternStart or 1 + local nameIndex = nameStart or 1 + while patternIndex <= #pattern do + local patternChar = string.sub(pattern, patternIndex, patternIndex) + if patternChar == "*" then + patternIndex += 1 + for candidateIndex = nameIndex, #name + 1 do + if matchesSegment(pattern, name, patternIndex, candidateIndex) then + return true + end + end + return false + elseif patternChar == "?" then + if nameIndex > #name then + return false + end + patternIndex += 1 + nameIndex += 1 + elseif patternChar == "[" then + if nameIndex > #name then + return false + end + local nameChar = string.sub(name, nameIndex, nameIndex) + patternIndex += 1 + local negate = string.sub(pattern, patternIndex, patternIndex) == "!" + if negate then + patternIndex += 1 + end + local found = false + while patternIndex <= #pattern and string.sub(pattern, patternIndex, patternIndex) ~= "]" do + local rangeLow = string.sub(pattern, patternIndex, patternIndex) + patternIndex += 1 + if + string.sub(pattern, patternIndex, patternIndex) == "-" + and patternIndex + 1 <= #pattern + and string.sub(pattern, patternIndex + 1, patternIndex + 1) ~= "]" + then + patternIndex += 1 + local rangeHigh = string.sub(pattern, patternIndex, patternIndex) + patternIndex += 1 + if nameChar >= rangeLow and nameChar <= rangeHigh then + found = true + end + else + if nameChar == rangeLow then + found = true + end + end + end + patternIndex += 1 + if negate then + found = not found + end + if not found then + return false + end + nameIndex += 1 + else + if nameIndex > #name or string.sub(name, nameIndex, nameIndex) ~= patternChar then + return false + end + patternIndex += 1 + nameIndex += 1 + end + end + return nameIndex > #name +end + +type MatchResult = "match" | "no_match" | "partial" + +-- Matches input path segments against pattern segments, returning: +-- "match" — full match (all pattern and input segments consumed) +-- "partial" — input consumed but pattern segments remain (worth descending) +-- "no_match" — input diverges from pattern (prune) +local function matchStep( + patternSegments: { string }, + inputSegments: { string }, + patternIndex: number, + inputIndex: number +): MatchResult + while patternIndex <= #patternSegments do + local segment = patternSegments[patternIndex] + if segment == "**" then + local best: MatchResult = "no_match" + for candidateIndex = inputIndex, #inputSegments + 1 do + local result = matchStep(patternSegments, inputSegments, patternIndex + 1, candidateIndex) + if result == "match" then + return "match" + elseif result == "partial" then + best = "partial" + end + end + return best + else + if inputIndex > #inputSegments then + return "partial" + end + if not matchesSegment(segment, inputSegments[inputIndex]) then + return "no_match" + end + patternIndex += 1 + inputIndex += 1 + end + end + if inputIndex > #inputSegments then + return "match" + end + return "no_match" +end + +local function walk(directory: path.Pathlike, segments: { string }, segmentIndex: number, results: { path.Path }) + if segmentIndex > #segments then + return + end + local success, entries = pcall(fs.listDirectory, directory) + if not success then + return + end + local segment = segments[segmentIndex] + local isLast = segmentIndex == #segments + if segment == "**" then + if not isLast then + walk(directory, segments, segmentIndex + 1, results) + end + for _, entry in entries do + local entryPath = path.join(directory, entry.name) + if isLast then + table.insert(results, entryPath) + end + if entry.type == "dir" then + walk(entryPath, segments, segmentIndex, results) + end + end + else + for _, entry in entries do + if matchesSegment(segment, entry.name) then + local entryPath = path.join(directory, entry.name) + if isLast then + table.insert(results, entryPath) + elseif entry.type == "dir" then + walk(entryPath, segments, segmentIndex + 1, results) + end + end + end + end +end + +local glob = {} + +-- Returns true if the given path matches the glob pattern, without touching the filesystem. +function glob.match(pattern: path.Pathlike, input: path.Pathlike): boolean + local patternParts = path.parse(pattern).parts + local inputParts = path.parse(input).parts + return matchStep(patternParts, inputParts, 1, 1) == "match" +end + +-- Walks the filesystem and returns all paths matching the glob pattern. +function glob.discover(input: path.Pathlike): { path.Path } + local parsed = path.parse(input) + local parts: { string } = parsed.parts + + local firstGlobIndex = #parts + 1 + for index, part in parts do + if string.find(part, "[%*%?%[]") then + firstGlobIndex = index + break + end + end + + if firstGlobIndex > #parts then + if fs.exists(parsed) then + return { parsed } + end + return {} + end + + local prefixPath = table.clone(parsed) + prefixPath.parts = { table.unpack(parts, 1, firstGlobIndex - 1) } + local segments = { table.unpack(parts, firstGlobIndex) } + + local results: { path.Path } = {} + walk(prefixPath, segments, 1, results) + -- To ensure a consistent sort order across POSIX and Windows, we sort by + -- parts rather than sorting based on string representation, which ensures + -- that code implicitly dependent on the ordering (e.g. snapshot tests) do + -- not break when running on different platforms. + table.sort(results, function(a: path.Path, b: path.Path) + for i = 1, math.min(#a.parts, #b.parts) do + if a.parts[i] ~= b.parts[i] then + return a.parts[i] < b.parts[i] + end + end + return #a.parts < #b.parts + end) + return results +end + +return glob diff --git a/.lute/batteries/pp.luau b/.lute/batteries/pp.luau new file mode 100644 index 00000000..e002e198 --- /dev/null +++ b/.lute/batteries/pp.luau @@ -0,0 +1,187 @@ +type ExistingOptions = { + rawStrings: boolean?, +} + +local isPrimitiveType = { string = true, number = true, boolean = true } + +local typeSortOrder: { [string]: number } = { + ["boolean"] = 1, + ["number"] = 2, + ["string"] = 3, + ["function"] = 4, + ["vector"] = 5, + ["buffer"] = 6, + ["thread"] = 7, + ["table"] = 8, + ["userdata"] = 9, + ["nil"] = 10, +} + +local function isPrimitiveArray(array: { [unknown]: unknown }): boolean + local max, len = 0, #array + + for key, value in array do + if type(key) ~= "number" then + return false + elseif key <= 0 then + return false + -- userdatas arent primitives + elseif not isPrimitiveType[type(value)] then + return false + end + + max = math.max(key, max) + end + + return len == max +end + +local function getFormattedAdress(t: {}): string + return `table<({t})>` +end + +local function formatValue(value: unknown, options: ExistingOptions?): string + if type(value) == "table" then + return getFormattedAdress(value) -- simple representation for table values + elseif type(value) ~= "string" then + return tostring(value) + end + + if options and options.rawStrings then + return `"{value}"` + end + return string.format("%q", value) +end + +local function formatKey(key: unknown, seq: boolean): string + if seq then + return "" + end + + if type(key) == "table" then + return `[{getFormattedAdress(key)}] = ` -- TODO: handling for table keys + end + if type(key) ~= "string" then + return `[{tostring(key)}] =` + end + + -- key is a simple identifier + if string.match(key, "^[%a_][%w_]-$") == key then + return `{key} = ` + end + + return `[{string.format("%q", key)}] = ` +end + +local function isEmpty(t: { [unknown]: unknown }): boolean + for _ in t do + return false + end + return true +end + +-- FIXME(luau): mark `dataTable` indexer as read-only +local function traverseTable( + dataTable: { [unknown]: unknown }, + seen: { [unknown]: boolean }, + indent: number, + options: ExistingOptions? +): string + local output = "" + local indentStr = string.rep(" ", indent) + + -- FIXME(Luau): We shouldn't need this annotation. + local keys: { unknown } = {} + + -- Collect all keys, not just primitives + for key in dataTable do + table.insert(keys, key) + end + + table.sort(keys, function(a, b): boolean + local typeofTableA, typeofTableB = typeof(dataTable[a]), typeof(dataTable[b]) + + if typeofTableA ~= typeofTableB then + return typeSortOrder[typeofTableA] < typeSortOrder[typeofTableB] + end + + if type(a) == "number" and type(b) == "number" then + return a < b + end + + return tostring(a) < tostring(b) + end) + + local inSequence = false + local previousKey = 0 + + for _, key in keys do + if type(key) == "number" and key > 0 and key - 1 == previousKey then + previousKey = key + inSequence = true + else + inSequence = false + end + + local value = dataTable[key] + + if type(value) ~= "table" then + output = `{output}{indentStr}{formatKey(key, inSequence)}{formatValue(value, options)},\n` + continue + end + + -- prevents self-referential tables from looping infinitely + if seen[value] then + output = `{output}{indentStr}{formatKey(key, inSequence)}[Circular Reference <({value})>],\n` + continue + else + seen[value] = true + end + + if isEmpty(value :: { [unknown]: unknown }) then + output = string.format("%s%s%s{},\n", output, indentStr, formatKey(key, inSequence)) + continue + end + + if isPrimitiveArray(value :: { [unknown]: unknown }) then -- collapse primitive arrays + local outputConcatTbl = table.create(#value) :: { string } + + for valueIndex, valueInArray in value :: { unknown } do + outputConcatTbl[valueIndex] = formatValue(valueInArray) + end + + output = string.format( + "%s%s%s{%*},\n", + output, + indentStr, + formatKey(key, inSequence), + table.concat(outputConcatTbl, ", ") + ) + continue + end + + output = string.format( + "%s%s%s{\n%s%s},\n", + output, + indentStr, + formatKey(key, inSequence), + traverseTable(value :: any, seen, indent + 1, options), + indentStr + ) + + seen[value] = nil + end + + return output +end + +return function(data: unknown, options: ExistingOptions?): string + options = options or {} :: ExistingOptions + + -- if it's not a primitive, we'll pretty print it as a value + if type(data) ~= "table" then + return formatValue(data, options) + end + + return `\{\n{traverseTable(data :: { [unknown]: unknown }, { [data] = true }, 1, options)}\}` +end diff --git a/.lute/batteries/result.luau b/.lute/batteries/result.luau new file mode 100644 index 00000000..9b4a1382 --- /dev/null +++ b/.lute/batteries/result.luau @@ -0,0 +1,36 @@ +type T = | { success: true, value: Value } | { success: false, traceback: string, err: string } + +local result = {} + +function result.ok(value: Value): T + return { + success = true, + value = value, + } +end + +function result.fail(err: string): T + -- Ignore the current call to debug.traceback, and the call to fail. + local traceback = debug.traceback(nil, 2) + + return { + success = false, + + traceback = traceback, + err = err, + } +end + +function result.pcall(f: (T...) -> R, ...: T...): T + local success, value = pcall(f, ...) + + if success then + return result.ok(value) + else + local err = value :: any + + return result.fail(err) + end +end + +return result diff --git a/.lute/batteries/richterm.luau b/.lute/batteries/richterm.luau new file mode 100644 index 00000000..ae066768 --- /dev/null +++ b/.lute/batteries/richterm.luau @@ -0,0 +1,100 @@ +--[[ + richterm + terminal ansi formatter +]] + +export type Formatter = (s: string, nocolor: boolean?) -> string + +-- @noinline (if it ever exists) +local function format(s: string, open: string, close: string, replace: string): string + local index = string.find(s, close, #open + 1, true) + local middle = s + + if index then + local closeLen = #close + local middleTbl = {} + local cursor = 1 + + while index do + table.insert(middleTbl, string.sub(s, cursor, index - 1)) + cursor = index + closeLen + index = string.find(s, close, cursor, true) + end + + middle = table.concat(middleTbl, replace) + end + + return open .. middle .. close +end + +local function formatter(open: string, close: string, replace: string?): Formatter + replace = replace or open + + return function(s, nocolor) + return if nocolor then s else format(s, open, close, replace :: string) + end +end + +local richterm = { + reset = formatter("\x1b[0m", "\x1b[0m"), + bold = formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m"), + dim = formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m"), + italic = formatter("\x1b[3m", "\x1b[23m"), + underline = formatter("\x1b[4m", "\x1b[24m"), + inverse = formatter("\x1b[7m", "\x1b[27m"), + hidden = formatter("\x1b[8m", "\x1b[28m"), + strikethrough = formatter("\x1b[9m", "\x1b[29m"), + + black = formatter("\x1b[30m", "\x1b[39m"), + red = formatter("\x1b[31m", "\x1b[39m"), + green = formatter("\x1b[32m", "\x1b[39m"), + yellow = formatter("\x1b[33m", "\x1b[39m"), + blue = formatter("\x1b[34m", "\x1b[39m"), + magenta = formatter("\x1b[35m", "\x1b[39m"), + cyan = formatter("\x1b[36m", "\x1b[39m"), + white = formatter("\x1b[37m", "\x1b[39m"), + gray = formatter("\x1b[90m", "\x1b[39m"), + + bgBlack = formatter("\x1b[40m", "\x1b[49m"), + bgRed = formatter("\x1b[41m", "\x1b[49m"), + bgGreen = formatter("\x1b[42m", "\x1b[49m"), + bgYellow = formatter("\x1b[43m", "\x1b[49m"), + bgBlue = formatter("\x1b[44m", "\x1b[49m"), + bgMagenta = formatter("\x1b[45m", "\x1b[49m"), + bgCyan = formatter("\x1b[46m", "\x1b[49m"), + bgWhite = formatter("\x1b[47m", "\x1b[49m"), + + brightBlack = formatter("\x1b[90m", "\x1b[39m"), + brightRed = formatter("\x1b[91m", "\x1b[39m"), + brightGreen = formatter("\x1b[92m", "\x1b[39m"), + brightYellow = formatter("\x1b[93m", "\x1b[39m"), + brightBlue = formatter("\x1b[94m", "\x1b[39m"), + brightMagenta = formatter("\x1b[95m", "\x1b[39m"), + brightCyan = formatter("\x1b[96m", "\x1b[39m"), + brightWhite = formatter("\x1b[97m", "\x1b[39m"), + + bgBrightBlack = formatter("\x1b[100m", "\x1b[49m"), + bgBrightRed = formatter("\x1b[101m", "\x1b[49m"), + bgBrightGreen = formatter("\x1b[102m", "\x1b[49m"), + bgBrightYellow = formatter("\x1b[103m", "\x1b[49m"), + bgBrightBlue = formatter("\x1b[104m", "\x1b[49m"), + bgBrightMagenta = formatter("\x1b[105m", "\x1b[49m"), + bgBrightCyan = formatter("\x1b[106m", "\x1b[49m"), + bgBrightWhite = formatter("\x1b[107m", "\x1b[49m"), +} + +function richterm.combine(...: Formatter): Formatter + local formatters = { ... } + + return function(s, nocolor) + if not nocolor then + for _, formatter in formatters do + s = formatter(s) + end + end + + return s + end +end + +return table.freeze(richterm) diff --git a/.lute/batteries/toml.luau b/.lute/batteries/toml.luau new file mode 100644 index 00000000..0df5be0d --- /dev/null +++ b/.lute/batteries/toml.luau @@ -0,0 +1,1511 @@ +local toml = {} + +-- serialization + +local function serializeValue(value: string | number): string + if typeof(value) == "string" then + value = string.gsub(value, "\\", "\\\\") + value = string.gsub(value, "\n", "\\n") + value = string.gsub(value, "\t", "\\t") + return '"' .. value .. '"' + end + + if value == math.huge then + return "inf" + end + + if value == -math.huge then + return "-inf" + end + + if value ~= value then + return "nan" + end + + return tostring(value) +end + +local function quoteKey(key: string): string + if not string.match(key, "^[%w_-]+$") then + return `"{key}"` + end + + return key +end + +local function hasNestedTables(tbl: { [unknown]: unknown }): boolean + for _, v in tbl do + if typeof(v) == "table" and next(v) ~= nil then + return true + end + end + + return false +end + +local function tableToToml(tbl: { [any]: any }, parent: string?): string + local result = "" + local subTables = {} + local hasDirectValues = false + + for k, v in tbl do + if typeof(v) == "table" and next(v) ~= nil then + if #v > 0 then + for _, entry in v do + result ..= "\n[[" .. (parent and parent .. "." or "") .. quoteKey(k) .. "]]\n" + result ..= tableToToml(entry, nil) + end + else + subTables[k] = v + end + else + hasDirectValues = true + result ..= quoteKey(k) .. " = " .. serializeValue(v) .. "\n" + end + end + + for k, v in subTables do + local key = parent and (parent .. "." .. quoteKey(k)) or quoteKey(k) + + if hasNestedTables(v) == true then + result ..= tableToToml(v, key) + continue + end + + if hasDirectValues or parent then + result ..= "\n[" .. key .. "]\n" + end + + result ..= tableToToml(v, key) + end + + return result +end + +local function serialize(tbl: { [any]: any }): string + return tableToToml(tbl, nil) +end + +-- deserialization + +export type TomlValue = string | number | boolean | { TomlValue } | { [string]: TomlValue } + +local function deserialize(input: string): { [string]: TomlValue } + -- convert CRLF to LF + if input:find("\r\n", 1, true) then + input = input:gsub("\r\n", "\n") + end + + -- Reject bare CR (only CRLF → LF is allowed) + if input:find("\r", 1, true) then + error "TOML parse error: bare carriage return (\\r) not allowed" + end + + -- Validate UTF-8 encoding + do + local i = 1 + local n = #input + while i <= n do + local b = string.byte(input, i) + local seqLen: number + + if b < 0x80 then + seqLen = 1 + elseif b < 0xC2 then + error("TOML parse error: invalid UTF-8 byte at position " .. i) + elseif b < 0xE0 then + seqLen = 2 + elseif b < 0xF0 then + seqLen = 3 + elseif b <= 0xF4 then + seqLen = 4 + else + error("TOML parse error: invalid UTF-8 byte at position " .. i) + end + + if i + seqLen - 1 > n then + error("TOML parse error: truncated UTF-8 sequence at position " .. i) + end + + -- Validate continuation bytes and overlong/surrogate checks + if seqLen == 2 then + local b2 = string.byte(input, i + 1) + if b2 < 0x80 or b2 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 1)) + end + elseif seqLen == 3 then + local b2 = string.byte(input, i + 1) + local b3 = string.byte(input, i + 2) + if b == 0xE0 then + if b2 < 0xA0 or b2 > 0xBF then + error("TOML parse error: overlong UTF-8 sequence at position " .. i) + end + elseif b == 0xED then + if b2 < 0x80 or b2 > 0x9F then + error("TOML parse error: UTF-8 surrogate codepoint at position " .. i) + end + else + if b2 < 0x80 or b2 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 1)) + end + end + if b3 < 0x80 or b3 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 2)) + end + elseif seqLen == 4 then + local b2 = string.byte(input, i + 1) + local b3 = string.byte(input, i + 2) + local b4 = string.byte(input, i + 3) + + if b == 0xF0 then + if b2 < 0x90 or b2 > 0xBF then + error("TOML parse error: overlong UTF-8 sequence at position " .. i) + end + elseif b == 0xF4 then + if b2 < 0x80 or b2 > 0x8F then + error("TOML parse error: UTF-8 codepoint > U+10FFFF at position " .. i) + end + else + if b2 < 0x80 or b2 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 1)) + end + end + + if b3 < 0x80 or b3 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 2)) + end + + if b4 < 0x80 or b4 > 0xBF then + error("TOML parse error: invalid UTF-8 continuation at position " .. (i + 3)) + end + end + i += seqLen + end + end + + local src = input + local pos = 1 + local len = #src + local srcBuf = buffer.fromstring(src) + + -- Table metadata: maps table reference -> { kind, keys } + type TableKind = + | "root" -- the document root + | "defined" -- created by an explicit [header] + | "implicit-header" -- implicitly created while navigating a [a.b.c] path + | "implicit-dotted" -- implicitly created by a dotted key assignment (a.b = v) + | "inline" -- an inline table; immutable after creation + | "array-element" -- an element of an [[array-of-tables]] + | "array-value" -- a static array literal (cannot be navigated into) + type TableMeta = { kind: TableKind, keys: { [string]: boolean } } + local tableMeta: { [any]: TableMeta } = {} + + -- tracks which Luau arrays are array-of-tables (vs regular array values) + local arrayTableSets: { [any]: boolean } = {} + + local function getMeta(tbl: any): TableMeta + if not tableMeta[tbl] then + tableMeta[tbl] = { kind = "implicit-header", keys = {} } + end + + return tableMeta[tbl] + end + + local function tomlParseError(msg: string): never + error(`TOML parse error at position {pos}: {msg}`) + end + + -- character helpers (all operate on the shared pos/src/len upvalues) + + local function byteAt(offset: number?): number? -- byte at pos+offset + local p = pos + (offset or 0) + return if p <= len then buffer.readu8(srcBuf, p - 1) else nil + end + + local function isDigit(c: number?): boolean + return c ~= nil and c >= 48 and c <= 57 + end + + local function isHexDigit(c: number?): boolean + return c ~= nil and ((c >= 48 and c <= 57) or (c >= 65 and c <= 70) or (c >= 97 and c <= 102)) + end + + local function isOctDigit(c: number?): boolean + return c ~= nil and c >= 48 and c <= 55 + end + + local function isBinDigit(c: number?): boolean + return c ~= nil and (c == 48 or c == 49) + end + + -- bare key chars: A-Z a-z 0-9 _ - + local function isBareKey(c: number?): boolean + if c == nil then + return false + end + + return (c >= 97 and c <= 122) or (c >= 65 and c <= 90) or (c >= 48 and c <= 57) or c == 95 or c == 45 + end + + -- control characters that are forbidden unescaped (everything < 0x20 except tab, + -- plus DEL 0x7F; LF 0x0A is handled separately per context) + local function isControlCharacter(c: number?): boolean + if c == nil then + return false + end + + return c <= 8 or c == 11 or c == 12 or (c >= 14 and c <= 31) or c == 127 + end + + -- whitespace skipping + + local function skipWhitespace() + while pos <= len do + local c = buffer.readu8(srcBuf, pos - 1) + + if c ~= 32 and c ~= 9 then + break + end + + pos += 1 + end + end + + -- skip a # comment up to (but not including) the newline + local function skipComment() + if byteAt() ~= 35 then + return + end -- '#' + + pos += 1 + + while pos <= len do + local c = buffer.readu8(srcBuf, pos - 1) + + if c == 10 then + break + end + + if isControlCharacter(c) then + tomlParseError "control character in comment" + end + + pos += 1 + end + end + + -- skip horizontal whitespace, newlines, and comments + local function skipWhitespaceNewlinesAndComments() + while pos <= len do + local c = buffer.readu8(srcBuf, pos - 1) + + if c == 32 or c == 9 or c == 10 then + pos += 1 + elseif c == 35 then + skipComment() + else + break + end + end + end + + -- after a value: consume trailing whitespace + optional comment, then require newline or EOF + local function expectLineEnd() + skipWhitespace() + skipComment() + + if pos > len then + return + end + + local c = byteAt() + if c == 10 then + pos += 1 + else + tomlParseError(`expected newline or EOF, got '${string.char(c :: number)}'`) + end + end + + -- string escape helpers + + local function parseUnicodeEscape(long: boolean): string + local n = if long then 8 else 4 + local hexStr = string.sub(src, pos, pos + n - 1) + + if #hexStr < n then + tomlParseError "incomplete unicode escape" + end + + for i = 1, n do + if not isHexDigit(string.byte(hexStr, i)) then + tomlParseError "invalid hex digit in unicode escape" + end + end + + pos += n + + local cp = tonumber(hexStr, 16) :: number + + if cp >= 0xD800 and cp <= 0xDFFF then + tomlParseError "surrogate codepoint in unicode escape" + end + + if cp > 0x10FFFF then + tomlParseError "unicode codepoint out of range" + end + + return utf8.char(cp) + end + + -- \xXX escape (TOML 1.1): unicode codepoint U+0000..U+00FF + local function parseHexEscape(): string + local hexStr = string.sub(src, pos, pos + 1) + + if #hexStr < 2 or not isHexDigit(string.byte(hexStr, 1)) or not isHexDigit(string.byte(hexStr, 2)) then + tomlParseError "invalid \\x escape" + end + + pos += 2 + + return utf8.char(tonumber(hexStr, 16) :: number) + end + + local function parseEscape(): string + if pos > len then + tomlParseError "incomplete escape sequence" + end + + local c = byteAt() :: number + pos += 1 + + if c == 98 then + return "\b" + end + + if c == 116 then + return "\t" + end + + if c == 110 then + return "\n" + end + + if c == 102 then + return "\f" + end + + if c == 114 then + return "\r" + end + + if c == 34 then + return '"' + end + + if c == 92 then + return "\\" + end + + if c == 101 then + return "\x1B" + end -- \e (TOML 1.1) + + if c == 117 then + return parseUnicodeEscape(false) + end -- \uXXXX + + if c == 85 then + return parseUnicodeEscape(true) + end -- \UXXXXXXXX + + if c == 120 then + return parseHexEscape() + end -- \xXX (TOML 1.1) + + tomlParseError(`invalid escape sequence \\${string.char(c)}`) + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + -- string parsers (pos is always past the opening delimiter on entry) + + local function parseBasicString(): string + local parts = {} + + while pos <= len do + -- Fast path: scan forward over plain characters in one go + local runStart = pos + + while pos <= len do + local c2 = buffer.readu8(srcBuf, pos - 1) + + -- break on: " (34), \ (92), DEL (127), ctrl chars except tab (9) + if c2 == 34 or c2 == 92 or c2 == 127 or (c2 < 32 and c2 ~= 9) then + break + end + + pos += 1 + end + + if pos > runStart then + table.insert(parts, string.sub(src, runStart, pos - 1)) + end + + if pos > len then + break + end + + local c = buffer.readu8(srcBuf, pos - 1) + + if c == 34 then -- closing " + pos += 1 + return table.concat(parts) + end + + if c == 92 then -- backslash + pos += 1 + table.insert(parts, parseEscape()) + continue + end + + if c == 10 then + tomlParseError "unescaped newline in basic string" + end + + tomlParseError "unescaped control character in basic string" + end + + tomlParseError "unterminated basic string" + + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + local function parseMultilineBasicString(): string + -- trim a single leading newline + if byteAt() == 10 then + pos += 1 + end + + local parts = {} + + while pos <= len do + -- Fast path: scan over plain chars (LF and tab are literal content too) + local runStart = pos + + while pos <= len do + local c2 = buffer.readu8(srcBuf, pos - 1) + + -- break on: " (34), \ (92), DEL (127), ctrl except tab (9) and LF (10) + if c2 == 34 or c2 == 92 or c2 == 127 or (c2 < 32 and c2 ~= 9 and c2 ~= 10) then + break + end + + pos += 1 + end + + if pos > runStart then + table.insert(parts, string.sub(src, runStart, pos - 1)) + end + + if pos > len then + break + end + + local c = buffer.readu8(srcBuf, pos - 1) + + if c == 34 then + if string.sub(src, pos, pos + 2) == '"""' then + pos += 3 + local extra = 0 + + while pos <= len and buffer.readu8(srcBuf, pos - 1) == 34 and extra < 2 do + table.insert(parts, '"') + pos += 1 + extra += 1 + end + + return table.concat(parts) + end + + -- lone " is valid content in a multiline basic string + table.insert(parts, '"') + pos += 1 + + continue + end + + if c == 92 then -- backslash + pos += 1 + + -- peek past trailing horizontal whitespace to detect line-ending backslash + local peek = pos + + while peek <= len do + local pc = buffer.readu8(srcBuf, peek - 1) + + if pc ~= 32 and pc ~= 9 then + break + end + + peek += 1 + end + + if peek <= len and buffer.readu8(srcBuf, peek - 1) == 10 then + -- line-ending backslash: skip newline and all following whitespace and newlines + pos = peek + 1 + while pos <= len do + local c3 = buffer.readu8(srcBuf, pos - 1) + if c3 ~= 32 and c3 ~= 9 and c3 ~= 10 then + break + end + pos += 1 + end + elseif peek > len then + tomlParseError "incomplete escape at end of file" + else + table.insert(parts, parseEscape()) + end + + continue + end + + -- ctrl char or DEL + tomlParseError "unescaped control character in multiline basic string" + end + + tomlParseError "unterminated multiline basic string" + + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + local function parseLiteralString(): string + local start = pos + + while pos <= len do + local c = buffer.readu8(srcBuf, pos - 1) + if c == 39 then -- closing ' + local result = string.sub(src, start, pos - 1) + pos += 1 + return result + end + + if c == 9 or (c >= 32 and c ~= 127) or c >= 128 then + pos += 1 -- plain char (tab, printable ASCII, or multibyte UTF-8) + continue + end + + if c == 10 then + tomlParseError "unescaped newline in literal string" + end + + tomlParseError "unescaped control character in literal string" + end + + tomlParseError "unterminated literal string" + + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + local function parseMultilineLiteralString(): string + if byteAt() == 10 then + pos += 1 + end -- trim leading newline + + local parts = {} + + while pos <= len do + -- Fast path: scan over plain chars (LF and tab are literal content) + local runStart = pos + while pos <= len do + local c2 = buffer.readu8(srcBuf, pos - 1) + -- break on: ' (39), DEL (127), ctrl except tab (9) and LF (10) + if c2 == 39 or c2 == 127 or (c2 < 32 and c2 ~= 9 and c2 ~= 10) then + break + end + pos += 1 + end + + if pos > runStart then + table.insert(parts, string.sub(src, runStart, pos - 1)) + end + + if pos > len then + break + end + + local c = buffer.readu8(srcBuf, pos - 1) + if c == 39 then + if string.sub(src, pos, pos + 2) == "'''" then + pos += 3 + local extra = 0 + while pos <= len and buffer.readu8(srcBuf, pos - 1) == 39 and extra < 2 do + table.insert(parts, "'") + pos += 1 + extra += 1 + end + return table.concat(parts) + end + -- lone ' is valid content in a multiline literal string + table.insert(parts, "'") + pos += 1 + continue + end + + -- ctrl char or DEL + tomlParseError "unescaped control character in multiline literal string" + end + + tomlParseError "unterminated multiline literal string" + + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + -- number / datetime helpers + + -- parse a run of digits (with internal underscores allowed), return digits-only string + local function parseDigits(digitCheck: (number?) -> boolean): string + if not digitCheck(byteAt()) then + tomlParseError "expected digit" + end + + local result = "" + local runStart = pos + + while pos <= len do + local c = buffer.readu8(srcBuf, pos - 1) + + if digitCheck(c) then + pos += 1 + elseif c == 95 then -- underscore + result ..= string.sub(src, runStart, pos - 1) + pos += 1 + + if pos > len then + tomlParseError "trailing underscore in number" + end + + local nc = buffer.readu8(srcBuf, pos - 1) + if nc == 95 then + tomlParseError "consecutive underscores in number" + end + + if not digitCheck(nc) then + tomlParseError "trailing underscore in number" + end + + runStart = pos + else + break + end + end + + result ..= string.sub(src, runStart, pos - 1) + return result + end + + local function looksLikeDate(): boolean + -- YYYY- : 4 decimal digits followed by '-' + if pos + 4 > len then + return false + end + + for i = 0, 3 do + if not isDigit(buffer.readu8(srcBuf, pos + i - 1)) then + return false + end + end + + return buffer.readu8(srcBuf, pos + 3) == 45 + end + + local function looksLikeTime(): boolean + -- HH: : exactly 2 decimal digits followed by ':' + return isDigit(byteAt(0)) and isDigit(byteAt(1)) and byteAt(2) == 58 + end + + -- Returns days in month for given year and month (1-12) + local function daysInMonth(year: number, month: number): number + if month == 2 then + local isLeap = (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0) + return if isLeap then 29 else 28 + end + + if month == 4 or month == 6 or month == 9 or month == 11 then + return 30 + end + + return 31 + end + + local function parseDatetime(): string + local hasDate = looksLikeDate() + local result = "" + + if hasDate then + -- Parse YYYY-MM-DD + local yearStr = string.sub(src, pos, pos + 3) + pos += 4 + + if byteAt() ~= 45 then + tomlParseError "expected '-' in date" + end + + pos += 1 + + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit month" + end + + local monthStr = string.sub(src, pos, pos + 1) + pos += 2 + local month = tonumber(monthStr) :: number + + if month < 1 or month > 12 then + tomlParseError(`invalid month: {month}`) + end + + if byteAt() ~= 45 then + tomlParseError "expected '-' in date" + end + + pos += 1 + + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit day" + end + + local dayStr = string.sub(src, pos, pos + 1) + pos += 2 + + local day = tonumber(dayStr) :: number + local year = tonumber(yearStr) :: number + if day < 1 or day > daysInMonth(year, month) then + tomlParseError(`invalid day {day} for month {month}`) + end + + result = `{yearStr}-{monthStr}-{dayStr}` + + -- Optional datetime separator: T, t, or space followed by digit + local sep = byteAt() + if sep == 84 or sep == 116 then + pos += 1 + elseif sep == 32 and isDigit(byteAt(1)) then + pos += 1 + else + return result -- date-local + end + + result ..= "T" + end + + -- Parse HH:MM[:SS[.frac]] + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit hour" + end + + local hourStr = string.sub(src, pos, pos + 1) + pos += 2 + local hour = tonumber(hourStr) :: number + if hour > 23 then + tomlParseError(`invalid hour: {hour}`) + end + + if byteAt() ~= 58 then + tomlParseError "expected ':' in time" + end + + pos += 1 + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit minute" + end + + local minStr = string.sub(src, pos, pos + 1) + pos += 2 + local minute = tonumber(minStr) :: number + if minute > 59 then + tomlParseError(`invalid minute: {minute}`) + end + + result ..= `{hourStr}:{minStr}` + + -- Optional seconds (TOML 1.1) + local secStr = "00" + if byteAt() == 58 then + pos += 1 + + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit second" + end + + secStr = string.sub(src, pos, pos + 1) + pos += 2 + local sec = tonumber(secStr) :: number + if sec > 59 then + tomlParseError(`invalid second: {sec}`) + end + end + result ..= `:{secStr}` + + -- Optional fractional seconds + if byteAt() == 46 then + pos += 1 + + if not isDigit(byteAt()) then + tomlParseError "expected digit after '.' in time" + end + + local fracStart = pos + while isDigit(byteAt()) do + pos += 1 + end + + local fracPart = string.sub(src, fracStart, pos - 1) + result ..= `.{fracPart}` + end + + -- Optional offset: Z, +HH:MM, -HH:MM + local oc = byteAt() + if oc == 90 or oc == 122 then + if not hasDate then + tomlParseError "offset not allowed in time-local" + end + + pos += 1 + result ..= "Z" + elseif oc == 43 or oc == 45 then + if not hasDate then + tomlParseError "offset not allowed in time-local" + end + + local sign = string.char(oc :: number) + + pos += 1 + + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit offset hour" + end + + local ohStr = string.sub(src, pos, pos + 1) + pos += 2 + local oh = tonumber(ohStr) :: number + if oh > 23 then + tomlParseError(`invalid offset hour: {oh}`) + end + + if byteAt() ~= 58 then + tomlParseError "expected ':' in offset" + end + + pos += 1 + + if not (isDigit(byteAt(0)) and isDigit(byteAt(1))) then + tomlParseError "expected 2-digit offset minute" + end + + local omStr = string.sub(src, pos, pos + 1) + pos += 2 + local om = tonumber(omStr) :: number + if om > 59 then + tomlParseError(`invalid offset minute: {om}`) + end + + result ..= `{sign}{ohStr}:{omStr}` + end + + return result + end + + local parseValue: () -> TomlValue + + local function parseNumOrDatetime(sign: string?): string | number + local signStr = sign or "" + local c = byteAt() + + -- bare inf / nan + if string.sub(src, pos, pos + 2) == "inf" then + pos += 3 + return if signStr == "-" then -math.huge else math.huge + end + + if string.sub(src, pos, pos + 2) == "nan" then + pos += 3 + return math.nan + end + + if not isDigit(c) then + tomlParseError(`expected digit, got '${string.char(c :: number)}'`) + end + + -- prefixed integer bases (no sign allowed) + if sign == nil and c == 48 then + local nc = byteAt(1) + if nc == 120 then + pos += 2 + return tonumber(parseDigits(isHexDigit), 16) :: number + end -- 0x + + if nc == 111 then + pos += 2 + return tonumber(parseDigits(isOctDigit), 8) :: number + end -- 0o + + if nc == 98 then + pos += 2 + return tonumber(parseDigits(isBinDigit), 2) :: number + end -- 0b + end + + -- datetime / time detection (no sign) + if sign == nil then + if looksLikeDate() then + return parseDatetime() + end + + if looksLikeTime() then + return parseDatetime() + end + end + + -- decimal integer or float + local isZero = c == 48 + local intDigits: string + if isZero then + pos += 1 + + if isDigit(byteAt()) then + tomlParseError "leading zero in integer" + end + + intDigits = "0" + else + intDigits = parseDigits(isDigit) + end + + local nc = byteAt() + local isFloat = false + local result = signStr .. intDigits + + if nc == 46 then -- '.' + isFloat = true + pos += 1 + if not isDigit(byteAt()) then + tomlParseError "expected digit after decimal point" + end + result ..= "." .. parseDigits(isDigit) + nc = byteAt() + end + + if nc == 101 or nc == 69 then -- e / E + isFloat = true + pos += 1 + local expSign = "" + local ec = byteAt() + if ec == 43 or ec == 45 then + expSign = string.char(ec :: number) + pos += 1 + end + if not isDigit(byteAt()) then + tomlParseError "expected digit in exponent" + end + result ..= "e" .. expSign .. parseDigits(isDigit) + end + + return if isFloat then tonumber(result) :: number else tonumber(signStr .. intDigits) :: number + end + + -- array and inline-table parsers (forward declared for mutual recursion) + local parseArray: () -> { TomlValue } + local parseInlineTable: () -> { [string]: TomlValue } + local parseKey: () -> { string } + local setNestedKey: (tbl: { [string]: TomlValue }, parts: { string }, value: TomlValue, fromDottedKey: boolean) -> () + + parseValue = function(): TomlValue + skipWhitespace() + if pos > len then + tomlParseError "expected value" + end + local c = byteAt() :: number + + if c == 34 then -- " + pos += 1 + if string.sub(src, pos, pos + 1) == '""' then + pos += 2 + return parseMultilineBasicString() + end + return parseBasicString() + end + + if c == 39 then -- ' + pos += 1 + if string.sub(src, pos, pos + 1) == "''" then + pos += 2 + return parseMultilineLiteralString() + end + return parseLiteralString() + end + + if c == 91 then -- [ + pos += 1 + return parseArray() + end + + if c == 123 then -- { + pos += 1 + return parseInlineTable() + end + + if c == 116 then -- t + if string.sub(src, pos, pos + 3) == "true" then + pos += 4 + if isBareKey(byteAt()) then + tomlParseError "invalid value" + end + return true + end + + tomlParseError "invalid value starting with 't'" + end + + if c == 102 then -- f + if string.sub(src, pos, pos + 4) == "false" then + pos += 5 + if isBareKey(byteAt()) then + tomlParseError "invalid value" + end + return false + end + + tomlParseError "invalid value starting with 'f'" + end + + if c == 105 then -- i + if string.sub(src, pos, pos + 2) == "inf" then + pos += 3 + return math.huge + end + + tomlParseError "invalid value starting with 'i'" + end + + if c == 110 then -- n + if string.sub(src, pos, pos + 2) == "nan" then + pos += 3 + return math.nan + end + + tomlParseError "invalid value starting with 'n'" + end + + if c == 43 then -- + + pos += 1 + return parseNumOrDatetime "+" + end + + if c == 45 then -- - + pos += 1 + return parseNumOrDatetime "-" + end + + if isDigit(c) then + return parseNumOrDatetime(nil) + end + + tomlParseError(`unexpected character '${string.char(c)}' in value`) + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + parseArray = function(): { TomlValue } + local result: { TomlValue } = {} + tableMeta[result] = { kind = "array-value", keys = {} } -- mark as static array + + skipWhitespaceNewlinesAndComments() + if byteAt() == 93 then + pos += 1 + return result + end -- empty [] + + while true do + skipWhitespaceNewlinesAndComments() + if pos > len then + tomlParseError "unterminated array" + end + + if byteAt() == 93 then + pos += 1 + break + end -- trailing comma case + + table.insert(result, parseValue()) + + skipWhitespaceNewlinesAndComments() + + if pos > len then + tomlParseError "unterminated array" + end + + local c = byteAt() + if c == 44 then -- ',' + pos += 1 + continue + end + + if c == 93 then -- ']' + pos += 1 + break + end + + tomlParseError(`expected ',' or ']' in array, got '${string.char(c :: number)}'`) + end + + return result + end + + parseKey = function(): { string } + skipWhitespace() + local parts: { string } = {} + + while true do + local c = byteAt() + local part: string + + if c == 34 then -- " + pos += 1 + part = parseBasicString() + elseif c == 39 then -- ' + pos += 1 + part = parseLiteralString() + elseif isBareKey(c) then + local start = pos + + while pos <= len do + local c2 = buffer.readu8(srcBuf, pos - 1) + if not isBareKey(c2) then + break + end + pos += 1 + end + + part = string.sub(src, start, pos - 1) + else + if #parts == 0 then + tomlParseError(`expected key, got '${string.char(c :: number or 0)}'`) + else + tomlParseError "expected key segment after '.'" + end + end + + table.insert(parts, part) + + skipWhitespace() + if byteAt() == 46 then -- '.' + pos += 1 + skipWhitespace() + else + break + end + end + + return parts + end + + -- navigate through dotted intermediate keys, creating tables as needed; + -- returns (leaf_table, leaf_key_string) + local function navigateDotted( + tbl: { [string]: TomlValue }, + parts: { string }, + newKind: TableKind + ): ({ [string]: TomlValue }, string) + local current: { [string]: TomlValue } = tbl + + for i = 1, #parts - 1 do + local k = parts[i] + local child = current[k] + + if child == nil then + local newTbl: { [string]: TomlValue } = {} + tableMeta[newTbl] = { kind = newKind, keys = {} } + current[k] = newTbl + getMeta(current).keys[k] = true + current = newTbl + elseif typeof(child) == "table" then + if arrayTableSets[child] then + tomlParseError(`cannot extend array-of-tables '${k}' via dotted key`) + end + + local m = getMeta(child) + + if m.kind == "array-value" then + tomlParseError(`cannot navigate through static array value '${k}'`) + end + + if m.kind == "inline" then + tomlParseError(`cannot extend inline table via key '${k}'`) + end + + if m.kind == "defined" or m.kind == "array-element" then + tomlParseError(`cannot extend explicitly-defined table '${k}' via dotted key`) + end + + current = child :: { [string]: TomlValue } + else + tomlParseError(`key '${k}' is not a table`) + end + end + return current, parts[#parts] + end + + setNestedKey = function(tbl: { [string]: TomlValue }, parts: { string }, value: TomlValue, fromDottedKey: boolean) + local newKind = if fromDottedKey then "implicit-dotted" else "implicit-header" + local leafTbl, leafKey = navigateDotted(tbl, parts, newKind) + + local m = getMeta(leafTbl) + + if m.keys[leafKey] then + tomlParseError(`duplicate key '${leafKey}'`) + end + + m.keys[leafKey] = true + leafTbl[leafKey] = value + + -- tag any freshly assigned table value + if typeof(value) == "table" and not tableMeta[value] then + tableMeta[value] = { kind = newKind, keys = {} } + end + end + + parseInlineTable = function(): { [string]: TomlValue } + local result: { [string]: TomlValue } = {} + tableMeta[result] = { kind = "inline", keys = {} } + skipWhitespaceNewlinesAndComments() -- TOML 1.1: newlines allowed inside inline tables + + if byteAt() == 125 then + pos += 1 + return result + end -- empty {} + + while true do + skipWhitespaceNewlinesAndComments() + if pos > len then + tomlParseError "unterminated inline table" + end + + if byteAt() == 125 then + pos += 1 + break + end -- '}' (trailing comma support) + + local keys = parseKey() + skipWhitespace() + + if byteAt() ~= 61 then + tomlParseError "expected '=' in inline table" + end -- '=' + + pos += 1 + + local value = parseValue() + setNestedKey(result, keys, value, false) + skipWhitespaceNewlinesAndComments() + + if pos > len then + tomlParseError "unterminated inline table" + end + + local c = byteAt() + if c == 44 then -- ',' + pos += 1 + continue + end + + if c == 125 then -- '}' + pos += 1 + break + end + + tomlParseError(`expected ',' or '}}' in inline table, got '${string.char(c :: number)}'`) + end + + return result + end + + -- navigate to the table referenced by a [key] or [[key]] header + local function navigateToHeader( + root: { [string]: TomlValue }, + parts: { string }, + isArrayTable: boolean + ): { [string]: TomlValue } + local current: { [string]: TomlValue } = root + for i = 1, #parts - 1 do + local k = parts[i] + local child = current[k] + + if child == nil then + local newTbl: { [string]: TomlValue } = {} + tableMeta[newTbl] = { kind = "implicit-header", keys = {} } + current[k] = newTbl + getMeta(current).keys[k] = true + current = newTbl + elseif typeof(child) == "table" then + if arrayTableSets[child] then + current = (child :: { TomlValue })[#(child :: { TomlValue })] :: { [string]: TomlValue } + else + local m = getMeta(child) + + if m.kind == "array-value" then + tomlParseError(`key '${k}' is a static array, cannot navigate through it`) + end + + if m.kind == "inline" then + tomlParseError "cannot extend inline table" + end + + current = child :: { [string]: TomlValue } + end + else + tomlParseError(`key '${k}' is not a table`) + end + end + + local leafKey = parts[#parts] + local existing = current[leafKey] + + if isArrayTable then + if existing == nil then + local arr: { { [string]: TomlValue } } = {} + + arrayTableSets[arr] = true + current[leafKey] = arr :: { TomlValue } + getMeta(current).keys[leafKey] = true + + local entry: { [string]: TomlValue } = {} + tableMeta[entry] = { kind = "array-element", keys = {} } + table.insert(arr, entry) + + return entry + end + + if typeof(existing) == "table" and arrayTableSets[existing] then + local entry: { [string]: TomlValue } = {} + tableMeta[entry] = { kind = "array-element", keys = {} } + table.insert(existing :: { { [string]: TomlValue } }, entry) + + return entry + end + + tomlParseError(`cannot define [[${leafKey}]]: key already exists as a different type`) + end + + if existing == nil then + local newTbl: { [string]: TomlValue } = {} + tableMeta[newTbl] = { kind = "defined", keys = {} } + current[leafKey] = newTbl + getMeta(current).keys[leafKey] = true + return newTbl + end + + if typeof(existing) == "table" then + -- Check arrayTableSets BEFORE getMeta to avoid creating spurious meta + if arrayTableSets[existing] then + tomlParseError(`cannot define [${leafKey}]: already an array-of-tables`) + end + + local m = getMeta(existing) + + if m.kind == "array-value" then + tomlParseError(`cannot define [${leafKey}]: key is a static array value`) + end + + if m.kind == "implicit-header" then + m.kind = "defined" + return existing :: { [string]: TomlValue } + end + + if m.kind == "defined" then + tomlParseError(`duplicate table header [${leafKey}]`) + end + + if m.kind == "inline" then + tomlParseError "cannot extend inline table with a table header" + end + + if m.kind == "implicit-dotted" then + tomlParseError(`table [${leafKey}] was already defined via a dotted key`) + end + + if m.kind == "array-element" then + tomlParseError(`cannot define [${leafKey}]: already an array-of-tables element`) + end + + tomlParseError(`cannot redefine [${leafKey}]`) + end + + tomlParseError(`key '${leafKey}' is not a table`) + + -- FIXME(Luau): `tomlParseError` paths are not currently treated as not returning + error "unreachable" + end + + -- main parse loop + + local root: { [string]: TomlValue } = {} + tableMeta[root] = { kind = "root", keys = {} } + local currentTable: { [string]: TomlValue } = root + + while pos <= len do + skipWhitespaceNewlinesAndComments() + if pos > len then + break + end + + local c = byteAt() :: number + + if c == 91 then -- '[' + if byteAt(1) == 91 then -- '[[' + pos += 2 + skipWhitespace() + local parts = parseKey() + skipWhitespace() + if string.sub(src, pos, pos + 1) ~= "]]" then + tomlParseError "expected ']]'" + end + pos += 2 + expectLineEnd() + currentTable = navigateToHeader(root, parts, true) + else + pos += 1 + skipWhitespace() + local parts = parseKey() + skipWhitespace() + if byteAt() ~= 93 then + tomlParseError "expected ']'" + end -- ']' + pos += 1 + expectLineEnd() + currentTable = navigateToHeader(root, parts, false) + end + else + local parts = parseKey() + skipWhitespace() + if byteAt() ~= 61 then + tomlParseError "expected '='" + end -- '=' + pos += 1 + local value = parseValue() + setNestedKey(currentTable, parts, value, true) + expectLineEnd() + end + end + + return root +end + +-- user-facing +toml.serialize = serialize +toml.deserialize = deserialize + +return table.freeze(toml) diff --git a/.lute/dev.luau b/.lute/dev.luau new file mode 100644 index 00000000..77da48f9 --- /dev/null +++ b/.lute/dev.luau @@ -0,0 +1,162 @@ +local cli = require "@scripts/libs/cli" +local divider = require "@scripts/libs/ui/divider" +local fs = require "@std/fs" +local initializeOutput = require "@scripts/libs/build/initializeOutput" +local initializeRojo = require "@scripts/libs/build/initializeRojo" +local io = require "@lute/io" +local path = require "@std/path" +local process = require "@std/process" +local richterm = require "@batteries/richterm" +local run = require "@scripts/libs/run" +local shouldFileBeTranspiled = require "@scripts/libs/build/shouldFileBeTranspiled" +local task = require "@std/task" +local transpile = require "@scripts/libs/build/transpile" +local types = require "./libs/types" +local useMonorepo = require "@scripts/libs/monorepo/useMonorepo" +local usePlaceDependencies = require "@scripts/libs/monorepo/usePlaceDependencies" +local useRepositoryConfig = require "@scripts/libs/monorepo/useRepositoryConfig" +local useSourcemapIndices = require "@scripts/libs/sourcemap/useSourcemapIndices" +local useSourcemapWatcher = require "@scripts/libs/sourcemap/useSourcemapWatcher" + +local args = cli.parser { description = "Launches and observes the given place for development" } +args:add("place", "positional", { help = "Name of place to build", required = true }) +args:parse { ... } + +local cwd = process.cwd() + +local repository = useRepositoryConfig() +local outputPath = repository.wth.paths.output +local outputProjectPath = repository.wth.paths.outputProject +local sourcemapPath = repository.wth.paths.sourcemap +local sourcemapProjectPath = repository.wth.paths.sourcemapProject + +local monorepo = useMonorepo() +local member = monorepo[args:get "place"] or error(`Unknown place named {args:get "place"}`) +local memberPlace = member.place or error(`Member {member.dirName} is not a place (does it have a place field?)`) +local placeId = memberPlace.placeId or error(`{memberPlace.title} is an abstract place (does it have a placeId?)`) + +local memberDependencies = usePlaceDependencies(monorepo, member) +local rojoMembers = table.clone(memberDependencies) +table.insert(rojoMembers, 1, member) + +local ctx: types.BuildContext = { + monorepo = monorepo, + repository = repository, + + member = member, + memberPlace = memberPlace, + memberDependencies = memberDependencies, + rojoMembers = rojoMembers, + + outputPath = outputPath, + outputProjectPath = outputProjectPath, + sourcemapPath = sourcemapPath, + sourcemapProjectPath = sourcemapProjectPath, + + sourcemapIndices = {}, + + globals = { + __DEV__ = true, + WTH_DIR_NAME = member.dirName, + WTH_PLACE_FOLDER = memberPlace.folderName, + WTH_PLACE_TITLE = memberPlace.title, + WTH_PLACE_SUBTITLE = memberPlace.subtitle, + }, +} + +print(divider "Initializing output...") +initializeOutput(ctx) + +print(divider "Initializing assets...") +run("asphalt", { "sync", "studio" }) + +print(divider "Initializing .blink files...") +for _, member in rojoMembers do + local blinkFilepath = path.join(member.dirPath, ".blink") + if fs.exists(blinkFilepath) then + print(richterm.dim(richterm.bold(`Compiling {blinkFilepath}`))) + run("blink", { blinkFilepath }) + task.spawn(run, "blink", { blinkFilepath }, { quiet = true } :: run.Options) + end +end + +print(divider "Initializing Rojo projects...") +initializeRojo(ctx) + +local sourcemapWatcher = useSourcemapWatcher(sourcemapPath) +local sourcemapFileWatcher = fs.watch(sourcemapPath) + +local sourcemapArgs = { + "sourcemap", + "--absolute", + "--include-non-scripts", + "--output", + sourcemapPath, + sourcemapProjectPath, +} + +run("rojo", sourcemapArgs) +table.insert(sourcemapArgs, 2, "--watch") +task.spawn(run, "rojo", sourcemapArgs, { quiet = true } :: run.Options) + +local function processChanges() + for absolutePath, fileWatcher in sourcemapWatcher.watchers do + local event = fileWatcher:next() + if event then + if event.change then + sourcemapWatcher.changes[absolutePath] = "changed" + end + end + end + + local event = sourcemapFileWatcher:next() + if event and event.change then + ctx.sourcemapIndices = useSourcemapIndices(sourcemapPath) + sourcemapWatcher.onChanged(ctx.sourcemapIndices) + end + + for filepath, action in sourcemapWatcher.changes do + if (action == "removed" or fs.exists(filepath)) and shouldFileBeTranspiled(monorepo, filepath) then + local relativePath = path.relative(cwd, filepath) + local outputFilepath = path.join(outputPath, relativePath) + + local formatter: richterm.Formatter, marker: string + if action == "added" then + formatter, marker = richterm.green, "+" + local outputDir = path.dirname(outputFilepath) + if not fs.exists(outputDir) then + fs.createDirectory(outputDir, { makeParents = true }) + end + fs.writeStringToFile(outputFilepath, transpile(ctx, filepath, fs.readFileToString(filepath))) + elseif action == "changed" then + formatter, marker = richterm.cyan, "↻" + fs.writeStringToFile(outputFilepath, transpile(ctx, filepath, fs.readFileToString(filepath))) + elseif action == "removed" then + formatter, marker = richterm.red, "-" + fs.remove(outputFilepath) + end + + print(formatter(`{marker} {relativePath}`)) + end + end + + table.clear(sourcemapWatcher.changes) +end + +print(divider "Running initial transpilation...") +processChanges() + +print(divider()) +task.spawn(run, "rojo", { "serve" }) + +task.delay(0.1, function() + print(richterm.blue(`Press {richterm.bold "Enter"} to open {memberPlace.title} in Roblox Studio.`)) + print(divider "Polling for changes...") + while task.wait(0.05) do + processChanges() + end +end) + +while io.read() do + run("lute", { "ropen", placeId }) +end diff --git a/.lute/libs/build/buildRojoProject.luau b/.lute/libs/build/buildRojoProject.luau new file mode 100644 index 00000000..3e0e502f --- /dev/null +++ b/.lute/libs/build/buildRojoProject.luau @@ -0,0 +1,73 @@ +local json = require "@std/json" +local log = require "@scripts/libs/log" +local path = require "@std/path" +local types = require "@scripts/libs/types" +local useRepositoryConfig = require "@scripts/libs/monorepo/useRepositoryConfig" + +local function insertMapping( + tree: types.RojoNode, + segments: { types.RojoMappingSegment }, + sourceName: string?, + sourcePath: path.Pathlike? +) + local current = tree + + for _, segment in segments do + if not current[segment.name] then + current[segment.name] = {} + end + + current = current[segment.name] + + if segment.className then + current["$className"] = segment.className + end + end + + if sourceName and sourcePath then + if not current[sourceName] then + current[sourceName] = {} + end + + current = current[sourceName] + + current["$path"] = { + optional = path.format(sourcePath), + } + end +end + +local function buildRojoProject(kind: "source" | "output", members: { types.MonorepoMember }): json.Object + local firstMember = members[1] or log.throw "Must specify atleast 1 member to build Rojo" + local place = firstMember.place or log.throw "First Rojo member must be a place" + + local repository = useRepositoryConfig() + local mappings = repository.wth.rojo.mappings :: types.RojoMappings + local tree: types.RojoNode = { ["$className"] = "DataModel" } + + for _, member in members do + if member.place then + for dir, segments in mappings do + insertMapping(tree, segments, member.folderName, member.rojoMappings[kind][dir]) + end + elseif member.placeMixin then + insertMapping( + tree, + member.placeMixin.rojo, + member.folderName, + if kind == "output" and member.placeMixin.transpile then member.outputDirPath else member.dirPath + ) + end + end + + return { + name = `Welcome To Hell: {place.title}`, + emitLegacyScripts = false, + servePlaceIds = { tonumber(place.placeId) }, + placeId = tonumber(place.placeId), + globIgnorePaths = { "**/.config.luau" }, + tree = tree, + } +end + +return buildRojoProject diff --git a/.lute/libs/build/initializeOutput.luau b/.lute/libs/build/initializeOutput.luau new file mode 100644 index 00000000..61bc5e5f --- /dev/null +++ b/.lute/libs/build/initializeOutput.luau @@ -0,0 +1,16 @@ +local copyInto = require "@scripts/libs/copyInto" +local emptyDir = require "@scripts/libs/emptyDir" +local richterm = require "@batteries/richterm" +local types = require "@scripts/libs/types" + +local function initializeOutput(ctx: types.BuildContext) + pcall(emptyDir, ctx.outputPath) + for _, member in ctx.rojoMembers do + if member.place or (member.placeMixin and member.placeMixin.transpile) then + print(richterm.cyan(`Copying {member.dirName} to output`)) + copyInto(member.dirPath, member.outputDirPath) + end + end +end + +return initializeOutput diff --git a/.lute/libs/build/initializeRojo.luau b/.lute/libs/build/initializeRojo.luau new file mode 100644 index 00000000..54931431 --- /dev/null +++ b/.lute/libs/build/initializeRojo.luau @@ -0,0 +1,11 @@ +local buildRojoProject = require "./buildRojoProject" +local fs = require "@std/fs" +local json = require "@std/json" +local types = require "@scripts/libs/types" + +local function initializeRojo(ctx: types.BuildContext) + fs.writeStringToFile(ctx.outputProjectPath, json.serialize(buildRojoProject("output", ctx.rojoMembers), true)) + fs.writeStringToFile(ctx.sourcemapProjectPath, json.serialize(buildRojoProject("source", ctx.rojoMembers), true)) +end + +return initializeRojo diff --git a/.lute/libs/build/shouldFileBeTranspiled.luau b/.lute/libs/build/shouldFileBeTranspiled.luau new file mode 100644 index 00000000..507929a2 --- /dev/null +++ b/.lute/libs/build/shouldFileBeTranspiled.luau @@ -0,0 +1,13 @@ +local getMemberFromPath = require "@scripts/libs/monorepo/getMemberFromPath" +local path = require "@std/path" +local process = require "@std/process" +local types = require "@scripts/libs/types" + +local function shouldFileBeTranspiled(monorepo: types.Monorepo, absolutePath: path.Pathlike) + local filepath = path.relative(process.cwd(), absolutePath) + local member = getMemberFromPath(monorepo, filepath) + + return not member.placeMixin or member.placeMixin.transpile +end + +return shouldFileBeTranspiled diff --git a/.lute/libs/build/transformers/resolveGlobals.luau b/.lute/libs/build/transformers/resolveGlobals.luau new file mode 100644 index 00000000..ef0f477f --- /dev/null +++ b/.lute/libs/build/transformers/resolveGlobals.luau @@ -0,0 +1,20 @@ +local pp = require "@batteries/pp" +local query = require "@std/syntax/query" +local syntax = require "@std/syntax" +local types = require "@scripts/libs/types" +local utils = require "@std/syntax/utils" + +local function resolveGlobals(ctx: types.TransfomerContext) + return query + .findAllFromRoot(ctx.tree, utils.isExprIndexName) + :filter(function(expr: syntax.AstExprIndexName): boolean + return expr.expression.tag == "global" and expr.expression.name.text == "_G" + end) + :replace(function(expr: syntax.AstExprIndexName) + local globalKey = expr.index.text + local global = ctx.build.globals[globalKey] + return if global == nil then nil else pp(global) + end) +end + +return resolveGlobals diff --git a/.lute/libs/build/transformers/resolveRequires.luau b/.lute/libs/build/transformers/resolveRequires.luau new file mode 100644 index 00000000..07cc5ae7 --- /dev/null +++ b/.lute/libs/build/transformers/resolveRequires.luau @@ -0,0 +1,36 @@ +local luau = require "@std/luau" +local path = require "@std/path" +local query = require "@std/syntax/query" +local richterm = require "@batteries/richterm" +local syntax = require "@std/syntax" +local types = require "@scripts/libs/types" +local utils = require "@std/syntax/utils" + +local function resolveRequires(ctx: types.TransfomerContext) + return query + .findAllFromRoot(ctx.tree, utils.isExprCall) + :filter(function(call: syntax.AstExprCall): boolean + return call.func.tag == "global" and call.func.name.text == "require" + end) + :replace(function(call: syntax.AstExprCall) + local pathArgument = call.arguments[1] + if not pathArgument or pathArgument.node.tag ~= "string" then + return nil + end + + local resolveSuccess, resolvedOrError = + pcall(luau.resolveModule, pathArgument.node.token.text, ctx.filepath) + + if not resolveSuccess then + print(richterm.yellow(`! Failed to resolve require {pathArgument.node.token.text}:`)) + print(richterm.yellow(` {resolvedOrError}`)) + print(richterm.yellow(` in {path.format(ctx.filepath)}`)) + return nil + end + + local requirePath = ctx.build.sourcemapIndices[path.format(resolvedOrError)] + return if requirePath then `require {string.format("%q", requirePath)}` else nil + end) +end + +return resolveRequires diff --git a/.lute/libs/build/transpile.luau b/.lute/libs/build/transpile.luau new file mode 100644 index 00000000..5edfbf9b --- /dev/null +++ b/.lute/libs/build/transpile.luau @@ -0,0 +1,35 @@ +local path = require "@std/path" +local printer = require "@std/syntax/printer" +local richterm = require "@batteries/richterm" +local syntax = require "@std/syntax" +local types = require "@scripts/libs/types" + +local transformers: { types.Transformer } = { + require "@scripts/libs/build/transformers/resolveGlobals", + require "@scripts/libs/build/transformers/resolveRequires", +} + +local function transpile(ctx: types.BuildContext, filepath: path.Pathlike, source: string) + for _, transformer in transformers do + local parseSuccess, treeOrError = pcall(syntax.parse, source) + if not parseSuccess then + print(richterm.yellow(`! Failed to parse {filepath}:`)) + print(richterm.yellow(` {treeOrError}`)) + return source + end + + source = printer.printFile( + treeOrError, + transformer { + build = ctx, + filepath = filepath, + source = source, + tree = treeOrError, + } + ) + end + + return source +end + +return transpile diff --git a/.lute/libs/cli.luau b/.lute/libs/cli.luau new file mode 100644 index 00000000..d12b6d45 --- /dev/null +++ b/.lute/libs/cli.luau @@ -0,0 +1,247 @@ +-- Forked for use in Welcome To Hell + +local process = require "@std/process" + +local cli = {} +cli.__index = cli + +type ArgKind = "positional" | "flag" | "option" | "variadic" +type ArgOptions = { + help: string?, + aliases: { string }?, + default: string?, + required: boolean?, + hidden: boolean?, +} + +type ArgData = { + name: string, + kind: ArgKind, + options: ArgOptions, +} + +type ParseResult = { + values: { [string]: string? }, + flags: { [string]: boolean }, + variadics: { string }, + fwdArgs: { string }, +} + +type ParserData = { + arguments: { [number]: ArgData }, + positional: { [number]: ArgData }, + variadicArg: ArgData?, + parsed: ParseResult, + description: string, +} + +type ParserInterface = typeof(cli) +export type Parser = setmetatable + +function cli.parser(props: { description: string }): Parser + local self: Parser = setmetatable({ + arguments = {}, + positional = {}, + variadicArg = nil :: ArgData?, + parsed = { values = {}, flags = {}, variadics = {}, fwdArgs = {} }, + description = props.description, + }, cli) + + self:add("script", "positional", { help = "This script", required = true, hidden = true }) + self:add("help", "flag", { help = "Shows this message", aliases = { "h" } }) + + return self +end + +function cli.add(self: Parser, name: string, kind: ArgKind, options: ArgOptions): () + local argument: ArgData = { + name = name, + kind = kind, + options = options or { aliases = {}, required = false }, + } + + table.insert(self.arguments, argument) + if kind == "positional" then + table.insert(self.positional, argument) + elseif kind == "variadic" then + self.variadicArg = argument + end +end + +function cli.parse(self: Parser, args: { string }): () + if table.find(args, "-h") or table.find(args, "--help") then + self:help() + process.exit(0) + end + + local i = 0 + local pos_index = 1 + + while i < #args do + i += 1 + + local arg = args[i] + + -- if the argument is exactly "--", we pass everything along + if arg == "--" then + table.move(args, i + 1, #args, #self.parsed.fwdArgs + 1, self.parsed.fwdArgs) + break + end + + -- if the argument starts with two dashes, we're parsing either a flag or an option + if string.sub(arg, 1, 2) == "--" then + local name = string.sub(arg, 3) + local found = false + + for _, argument in self.arguments do + local aliases = argument.options.aliases or {} + + if argument.name == name or table.find(aliases, name) then + found = true + + if argument.kind == "option" then + -- advance past the argument + i += 1 + + assert(i <= #args, "Missing value for argument: " .. argument.name) + self.parsed.values[argument.name] = args[i] + + break + end + + self.parsed.flags[argument.name] = true + break + end + end + + assert(found, "Unknown argument: " .. name) + continue + end + + -- if the argument starts with a single dash, we're parsing a flag + if string.sub(arg, 1, 1) == "-" then + local flags = string.sub(arg, 2) + + for j = 1, #flags do + local name = string.sub(flags, j, j) + local found = false + for _, argument in self.arguments do + local aliases = argument.options.aliases or {} + if argument.name == name or table.find(aliases, name) then + found = true + if argument.kind == "option" then + i += 1 + assert(i <= #args, "Missing value for argument: " .. argument.name) + self.parsed.values[argument.name] = args[i] + else + self.parsed.flags[argument.name] = true + end + break + end + end + + assert(found, "Unknown argument: " .. name) + end + + continue + end + + -- if we have positional arguments left, we can take this argument as one + if pos_index <= #self.positional then + self.parsed.values[self.positional[pos_index].name] = arg + pos_index += 1 + continue + end + + -- if we have a variadic argument, we can take this argument as part of it + if self.variadicArg then + table.insert(self.parsed.variadics, arg) + continue + end + + -- otherwise, the argument is forwarded on + table.insert(self.parsed.fwdArgs, arg) + end + + -- check that all required arguments are present, and set any default values as needed + for _, argument in self.arguments do + if argument.options.required then + if argument.kind == "variadic" then + assert(#self.parsed.variadics > 0, "Missing required variadic argument: " .. argument.name) + else + assert(self.parsed.values[argument.name], "Missing required argument: " .. argument.name) + end + end + + if self.parsed.values[argument.name] == nil and argument.options.default then + self.parsed.values[argument.name] = argument.options.default + end + end +end + +function cli.get(self: Parser, name: string): string? + return self.parsed.values[name] +end + +function cli.has(self: Parser, name: string): boolean + return self.parsed.flags[name] ~= nil +end + +function cli.variadics(self: Parser): { string } + return self.parsed.variadics +end + +function cli.forwarded(self: Parser): { string }? + return self.parsed.fwdArgs +end + +function cli.usage(self: Parser, name: string): string + local parts = { name } + + for _, arg in self.positional do + if not arg.options.hidden then + if arg.options.required then + table.insert(parts, `<{arg.name}>`) + else + table.insert(parts, `[{arg.name}]`) + end + end + end + + for _, arg in self.arguments do + if not arg.options.hidden and arg.kind ~= "positional" and arg.kind ~= "variadic" then + table.insert(parts, "[options]") + break + end + end + + if self.variadicArg and not self.variadicArg.options.hidden then + local v = self.variadicArg + if v.options.required then + table.insert(parts, `<{v.name}...>`) + else + table.insert(parts, `[{v.name}...]`) + end + end + + return table.concat(parts, " ") +end + +function cli.help(self: Parser, formatter: ((s: string) -> string)?): () + local fmt = formatter or function(s) + return s + end + + print(fmt "Usage:") + for _, argument in self.arguments do + if argument.options.hidden then + continue + end + + local aliasStr = table.concat(argument.options.aliases or {}, ", ") + local reqStr = if argument.options.required then "(required) " else "" + print(fmt(string.format(" --%s (-%s) - %s%s", argument.name, aliasStr, reqStr, argument.options.help or ""))) + end +end + +return table.freeze(cli) diff --git a/.lute/libs/copyInto.luau b/.lute/libs/copyInto.luau new file mode 100644 index 00000000..c842e11e --- /dev/null +++ b/.lute/libs/copyInto.luau @@ -0,0 +1,25 @@ +local fs = require "@std/fs" +local path = require "@std/path" + +local function copyInto(from: path.Pathlike, to: path.Pathlike) + if fs.type(from) == "dir" then + if not fs.exists(to) then + fs.createDirectory(to) + end + + for _, entry in fs.listDirectory(from) do + local entryPath = path.join(from, entry.name) + local entryDestination = path.join(to, entry.name) + + if entry.type == "dir" then + copyInto(entryPath, entryDestination) + else + fs.copy(entryPath, entryDestination) + end + end + else + fs.copy(from, to) + end +end + +return copyInto diff --git a/.lute/libs/emptyDir.luau b/.lute/libs/emptyDir.luau new file mode 100644 index 00000000..d8499551 --- /dev/null +++ b/.lute/libs/emptyDir.luau @@ -0,0 +1,15 @@ +local fs = require "@std/fs" +local path = require "@std/path" + +local function emptyDir(dir: path.Pathlike) + for _, file in fs.listDirectory(dir) do + local filepath = path.join(dir, file.name) + if fs.type(filepath) == "dir" then + fs.removeDirectory(filepath, { recursive = true }) + else + fs.remove(filepath) + end + end +end + +return emptyDir diff --git a/.lute/libs/findCommentRegion.luau b/.lute/libs/findCommentRegion.luau new file mode 100644 index 00000000..483565f8 --- /dev/null +++ b/.lute/libs/findCommentRegion.luau @@ -0,0 +1,5 @@ +local function findCommentRegion(source: string, name: string) + return string.find(source, `%-%- #region {name}%s.-%-%- #endregion`) +end + +return findCommentRegion diff --git a/.lute/libs/log.luau b/.lute/libs/log.luau new file mode 100644 index 00000000..7a4db0d1 --- /dev/null +++ b/.lute/libs/log.luau @@ -0,0 +1,36 @@ +local pp = require "@batteries/pp" +local process = require "@std/process" +local richterm = require "@batteries/richterm" + +local function stringify(formatter: richterm.Formatter, ...: unknown) + local len = select("#", ...) + local prettified = table.create(len) + for index = 1, len do + local value = select(index, ...) + prettified[index] = formatter(if type(value) == "string" then value else pp(value)) + end + return table.concat(prettified, " ") +end + +local function createLogger(formatter: richterm.Formatter) + return function(...: unknown) + print(stringify(formatter, ...)) + end +end + +local function throw(...: unknown): never + print(stringify(richterm.red, ...)) + return process.exit(1) +end + +return table.freeze { + bare = createLogger(function(s: string, nocolor: boolean?): string + return s + end), + + verbose = createLogger(richterm.dim), + info = createLogger(richterm.cyan), + warn = createLogger(richterm.yellow), + error = createLogger(richterm.red), + throw = throw, +} diff --git a/.lute/libs/monorepo/getMemberFromPath.luau b/.lute/libs/monorepo/getMemberFromPath.luau new file mode 100644 index 00000000..850be947 --- /dev/null +++ b/.lute/libs/monorepo/getMemberFromPath.luau @@ -0,0 +1,14 @@ +local path = require "@std/path" +local types = require "@scripts/libs/types" + +local function getMemberFromPath(monorepo: types.Monorepo, filepath: path.Pathlike): types.MonorepoMember + local firstPart = path.parse(filepath).parts[1] + for _, member in ipairs(monorepo) do + if member.dirName == firstPart then + return member + end + end + return error "unreachable" +end + +return getMemberFromPath diff --git a/.lute/libs/monorepo/useMonorepo.luau b/.lute/libs/monorepo/useMonorepo.luau new file mode 100644 index 00000000..0616fb85 --- /dev/null +++ b/.lute/libs/monorepo/useMonorepo.luau @@ -0,0 +1,73 @@ +local fs = require "@std/fs" +local log = require "@scripts/libs/log" +local luau = require "@std/luau" +local path = require "@std/path" +local types = require "@scripts/libs/types" +local useRepositoryConfig = require "./useRepositoryConfig" + +local function useMonorepo(): types.Monorepo + local repository = useRepositoryConfig() + local monorepo: types.Monorepo = {} + + for _, entry in fs.listDirectory "." do + if entry.type ~= "dir" then + continue + end + + local configPath = path.join(entry.name, ".config.luau") + if not fs.exists(configPath) or fs.type(configPath) ~= "file" then + continue + end + + local config: types.LuauConfig = luau.loadModule(configPath) + local wthConfig = config.wth + if not wthConfig then + continue + end + + local placeConfig, placeMixinConfig = wthConfig.place, wthConfig.placeMixin + if placeConfig and placeMixinConfig then + log.warn(entry.name, "config specifies place AND placeMixin, which is mutually exclusive") + continue + elseif not (placeConfig or placeMixinConfig) then + continue + end + + local folderName = if placeConfig + then placeConfig.folderName + elseif placeMixinConfig then placeMixinConfig.folderName + else log.throw(`Missing folderName for {entry.name}`) + + local member: types.MonorepoMember = { + place = placeConfig, + placeMixin = placeMixinConfig, + + folderName = folderName, + dirName = entry.name, + dirPath = entry.name, + configPath = configPath, + outputDirPath = path.join(repository.wth.paths.output, entry.name), + + rojoMappings = { + source = {}, + output = {}, + }, + } + + for key in repository.wth.rojo.mappings :: any do + member.rojoMappings.source[key] = path.join(member.dirPath, key) + member.rojoMappings.output[key] = path.join(repository.wth.paths.output, member.dirPath, key) + end + + table.insert(monorepo, member) + monorepo[entry.name] = member + end + + table.sort(monorepo, function(lhs: types.MonorepoMember, rhs: types.MonorepoMember) + return lhs.dirName < rhs.dirName + end) + + return monorepo +end + +return useMonorepo diff --git a/.lute/libs/monorepo/usePlaceDependencies.luau b/.lute/libs/monorepo/usePlaceDependencies.luau new file mode 100644 index 00000000..aebc0f9e --- /dev/null +++ b/.lute/libs/monorepo/usePlaceDependencies.luau @@ -0,0 +1,49 @@ +local types = require "@scripts/libs/types" + +local function usePlaceDependencies(monorepo: types.Monorepo, member: types.MonorepoMember) + local resolved = {} + local resolvedSet = {} + local visiting = {} + + local function visit(current: types.MonorepoMember, stack: { string }) + local place = current.place + if not place then + return + end + + if visiting[current.dirName] then + local cycleStart = table.find(stack, current.dirName) or 1 + local cycle = table.move(stack, cycleStart, #stack, 1, {}) + table.insert(cycle, current.dirName) + + error(`Place has cyclic dependency: {table.concat(cycle, " -> ")}`) + end + + if resolvedSet[current.dirName] then + return + end + + visiting[current.dirName] = true + table.insert(stack, current.dirName) + + for _, dependencyName in place.dependencies or {} do + local dependency = monorepo[dependencyName] + or error(`Place {current.dirName} has unknown dependency named {dependencyName}`) + visit(dependency, stack) + + if not resolvedSet[dependency.dirName] then + resolvedSet[dependency.dirName] = true + table.insert(resolved, dependency) + end + end + + visiting[current.dirName] = nil + table.remove(stack) + end + + visit(member, {}) + + return resolved +end + +return usePlaceDependencies diff --git a/.lute/libs/monorepo/useRepositoryConfig.luau b/.lute/libs/monorepo/useRepositoryConfig.luau new file mode 100644 index 00000000..5c7114c7 --- /dev/null +++ b/.lute/libs/monorepo/useRepositoryConfig.luau @@ -0,0 +1,11 @@ +local luau = require "@std/luau" +local types = require "@scripts/libs/types" + +local cache: any + +local function useRepositoryConfig(): types.RepositoryConfig + cache = cache or luau.loadModule ".config.luau" + return cache +end + +return useRepositoryConfig diff --git a/.lute/libs/run.luau b/.lute/libs/run.luau new file mode 100644 index 00000000..ec2bdb23 --- /dev/null +++ b/.lute/libs/run.luau @@ -0,0 +1,42 @@ +local io = require "@std/io" +local path = require "@std/path" +local process = require "@std/process" +-- local richterm = require "@batteries/richterm" + +export type Options = { + cwd: path.Pathlike?, + env: { [string]: string }?, + quiet: boolean?, + ignoreFailure: boolean?, + captureOutput: boolean?, +} + +local function run(program: string, args: { any }, options: Options?) + options = options or {} :: Options + + local stringifiedArgs = table.create(#args + 1) :: { string } + for index, arg in args do + stringifiedArgs[index] = tostring(arg) + end + table.insert(stringifiedArgs, 1, program) + + -- if not options.quiet then + -- print(richterm.dim(`$ {table.concat(stringifiedArgs, " ")}`)) + -- end + + local result = process.run(stringifiedArgs, { + cwd = options.cwd and tostring(options.cwd), + env = options.env, + stdio = if options.captureOutput or options.quiet then "default" else "inherit", + }) + + -- lute doesn't stream output when using `default` stdio; so we print it + -- here for ergonomics + if options.captureOutput and not options.quiet then + io.write(result.stdout, result.stderr) + end + + return if result.ok or options.ignoreFailure then result else error(result.stderr) +end + +return run diff --git a/.lute/libs/sourcemap/sanitizeQuotes.luau b/.lute/libs/sourcemap/sanitizeQuotes.luau new file mode 100644 index 00000000..b12236d8 --- /dev/null +++ b/.lute/libs/sourcemap/sanitizeQuotes.luau @@ -0,0 +1,7 @@ +local function sanitizeQuotes(str: string): string + str = string.gsub(str, '"', '\\"') + str = string.gsub(str, "\\", "\\\\") + return str +end + +return sanitizeQuotes diff --git a/.lute/libs/sourcemap/useSourcemapIndices.luau b/.lute/libs/sourcemap/useSourcemapIndices.luau new file mode 100644 index 00000000..06dc856e --- /dev/null +++ b/.lute/libs/sourcemap/useSourcemapIndices.luau @@ -0,0 +1,55 @@ +-- From https://github.com/checkraisefold/warmluau/blob/8299341613adfef565a19b8ee7da25c1c66ccb10/src/ingredients/resolve_require/init.luau + +local fs = require "@std/fs" +local json = require "@std/json" +local path = require "@std/path" +local sanitizeQuotes = require "@scripts/libs/sourcemap/sanitizeQuotes" +local types = require "@scripts/libs/types" + +local function sourcemapIndices(sourcemapPath: path.Pathlike): types.SourcemapIndices + local sourcemap = json.deserialize(fs.readFileToString(sourcemapPath)) :: types.SourcemapNode + local indices: { [string]: string } = {} + + local nodes = sourcemap.children + if not nodes then + return {} + end + + local lenNodes = #nodes + for index = 1, lenNodes do + local service = nodes[index] + service.name = `@game/{service.name}` + end + + local index = 0 + while index < lenNodes do + index += 1 + local node = nodes[index] + local nodeName = node.name + + local filePaths = node.filePaths + if filePaths then + local lenFilePaths = #filePaths + for filePathsIndex = 1, lenFilePaths do + local filePath = filePaths[filePathsIndex] + local absolutePath = path.format(filePath) + indices[absolutePath] = nodeName + end + end + + local children = node.children + if children then + local children_count = #children + for children_index = 1, children_count do + local child = children[children_index] + child.name = `{nodeName}/{child.name}` + end + table.move(children, 1, children_count, lenNodes + 1, nodes) + lenNodes += children_count + end + end + + return indices +end + +return sourcemapIndices diff --git a/.lute/libs/sourcemap/useSourcemapWatcher.luau b/.lute/libs/sourcemap/useSourcemapWatcher.luau new file mode 100644 index 00000000..d90198e5 --- /dev/null +++ b/.lute/libs/sourcemap/useSourcemapWatcher.luau @@ -0,0 +1,48 @@ +local fs = require "@std/fs" +local types = require "@scripts/libs/types" + +--[=[ + Watches the project's sourcemap.json for files added and removed. Also + watches all listed files in the sourcemap for file changes. + + Although limited, this is significantly more reliable than Lute's `fs.watch` + and more performant than long polling. +]=] +local function useSourcemapWatcher() + local oldIndices: types.SourcemapIndices = {} + local changes: { [string]: "added" | "changed" | "removed" } = {} + local watchers: { [string]: types.Watcher } = {} + + local function onChanged(newIndices: types.SourcemapIndices) + for absolutePath in newIndices do + if not oldIndices[absolutePath] and not changes[absolutePath] then + changes[absolutePath] = "added" + + local watcher = fs.watch(absolutePath) + watchers[absolutePath] = watcher + end + end + + for absolutePath, hash in oldIndices do + if not newIndices[absolutePath] and not changes[absolutePath] then + changes[absolutePath] = "removed" + + local watcher = watchers[absolutePath] + if watcher then + watcher:close() + watchers[absolutePath] = nil + end + end + end + + oldIndices = newIndices + end + + return { + changes = changes, + watchers = watchers, + onChanged = onChanged, + } +end + +return useSourcemapWatcher diff --git a/.lute/libs/types.luau b/.lute/libs/types.luau new file mode 100644 index 00000000..e160ced4 --- /dev/null +++ b/.lute/libs/types.luau @@ -0,0 +1,115 @@ +local fs = require "@std/fs" +local path = require "@std/path" +local syntax = require "@std/syntax" +local syntaxTypes = require "@std/syntax/types" + +-- Rojo + +export type RojoMappings = { [string]: { RojoMappingSegment } } + +export type RojoMappingSegment = { + name: string, + className: string?, +} + +export type RojoPath = string | { optional: string } + +export type RojoNode = { + ["$className"]: string?, + ["$path"]: RojoPath?, + [string]: RojoNode, +} + +export type RojoProjectTarget = "source" | "output" + +-- Rojo Sourcemap + +export type SourcemapNode = { + name: string, + filePaths: { string }?, + children: { SourcemapNode }?, +} + +export type SourcemapIndices = { [string]: string } + +-- Monorepo + +export type Place = { + title: string, + subtitle: string?, + folderName: string, + placeId: string?, + dependencies: { string }?, +} + +export type PlaceMixin = { + transpile: boolean, + folderName: string, + rojo: { + { + name: string, + className: string?, + } + }, +} + +export type LuauConfig = { + wth: { + place: Place?, + placeMixin: PlaceMixin?, + }, +} + +export type MonorepoMember = { + place: Place?, + placeMixin: PlaceMixin?, + + folderName: string, + dirName: string, + dirPath: path.Pathlike, + configPath: path.Pathlike, + outputDirPath: path.Pathlike, + + rojoMappings: { + [RojoProjectTarget]: { [keyof]: path.Pathlike? }, + }, +} + +export type Monorepo = { [any]: MonorepoMember } + +export type RepositoryConfig = typeof(require "@scripts/libs/../../.config") + +-- Build + +export type BuildContext = { + monorepo: Monorepo, + repository: RepositoryConfig, + + member: MonorepoMember, + memberPlace: Place, + memberDependencies: { MonorepoMember }, + rojoMembers: { MonorepoMember }, + + outputPath: path.Pathlike, + outputProjectPath: path.Pathlike, + sourcemapPath: path.Pathlike, + sourcemapProjectPath: path.Pathlike, + + sourcemapIndices: SourcemapIndices, + globals: { [string]: string | boolean | nil }, +} + +export type TransfomerContext = { + tree: syntax.ParseResult, + filepath: path.Pathlike, + source: string, + build: BuildContext, +} + +export type Transformer = (ctx: TransfomerContext) -> syntaxTypes.Replacements + +-- Lute + +export type Watcher = typeof(fs.watch "") + +return nil diff --git a/.lute/libs/ui/banner.luau b/.lute/libs/ui/banner.luau new file mode 100644 index 00000000..9cc3375c --- /dev/null +++ b/.lute/libs/ui/banner.luau @@ -0,0 +1,17 @@ +local richterm = require "@batteries/richterm" + +local PRIMARY = richterm.red +local SECONDARY = richterm.yellow + +return table.freeze { + PRIMARY = PRIMARY, + SECONDARY = SECONDARY, + + BASE_TOP = "▄ █ ▀█▀ █ ▄", + BASE_BOT = " █▀█ █ █▀█ ", + + RICH_TOP = `{PRIMARY "▄ █ "}{SECONDARY "▀█▀"}{PRIMARY " █ ▄"}`, + RICH_BOT = `{PRIMARY " █▀█"}{SECONDARY " █ "}{PRIMARY "█▀█ "}`, + + INDENT = " ", +} diff --git a/.lute/libs/ui/divider.luau b/.lute/libs/ui/divider.luau new file mode 100644 index 00000000..0724c3a5 --- /dev/null +++ b/.lute/libs/ui/divider.luau @@ -0,0 +1,21 @@ +local richterm = require "@batteries/richterm" + +const LINE = "―" + +local function divider(label: string?, length: number?) + length = length or 60 + + if label then + local labelLength = string.len(label) + local lineLength = (length - labelLength) * 0.5 + + -- we add an extra line at the end if the label is uneven + local endPadding = labelLength % 2 + + return richterm.dim(`{string.rep(LINE, lineLength)} {label} {string.rep(LINE, lineLength + endPadding)}`) + end + + return string.rep(richterm.dim(LINE), length) +end + +return divider diff --git a/.lute/ripple.luau b/.lute/ripple.luau new file mode 100644 index 00000000..71fa903c --- /dev/null +++ b/.lute/ripple.luau @@ -0,0 +1,19 @@ +local cli = require "@batteries/cli" +local log = require "@scripts/libs/log" +local run = require "@scripts/libs/run" +local task = require "@std/task" +local useMonorepo = require "@scripts/libs/monorepo/useMonorepo" + +local args = cli.parser { description = "Runs a command across all monorepo members" } +args:parse { ... } + +local monorepo = useMonorepo() +local forwarded = args:forwarded() or {} :: { string } +table.remove(forwarded, 1) +local program = forwarded[1] +table.remove(forwarded, 1) + +for _, member in monorepo do + log.verbose(member.dirName) + task.spawn(run, program, forwarded, { cwd = member.dirPath, ignoreFailure = true } :: run.Options) +end diff --git a/.lute/ropen.luau b/.lute/ropen.luau new file mode 100644 index 00000000..8d28ad9f --- /dev/null +++ b/.lute/ropen.luau @@ -0,0 +1,24 @@ +local cli = require "@scripts/libs/cli" +local run = require "@scripts/libs/run" +local system = require "@lute/system" +local useMonorepo = require "@scripts/libs/monorepo/useMonorepo" + +local args = cli.parser { description = "Opens a given place ID in Roblox Studio" } +args:add("place", "positional", { help = "Place name or ID to open", required = true }) +args:parse { ... } + +local function open(url) + run(if system.os == "windows" then "explorer" elseif system.os == "Darwin" then "open" else "xdg-open", { url }) +end + +local place = args:get "place" +local placeId = tonumber(place) +if placeId == nil then + -- monorepo alias + local monorepo = useMonorepo() + local member = monorepo[place] or error(`Unknown place ID or monorepo member named {place}`) + local place = member.place or error(`Monorepo member must be a place`) + placeId = place.placeId or error(`Monorepo member must be a real place (is placeId missing?)`) +end + +open(`roblox-studio:1+task:EditPlace+placeId:{placeId}+universeId:0`) diff --git a/rokit.toml b/rokit.toml new file mode 100644 index 00000000..49df5b2a --- /dev/null +++ b/rokit.toml @@ -0,0 +1,11 @@ +# This file lists tools managed by Rokit, a toolchain manager for Roblox projects. +# For more information, see https://github.com/rojo-rbx/rokit + +# New tools can be added by running `rokit add ` in a terminal. + +[tools] +luau-lsp = "JohnnyMorganz/luau-lsp@1.68.0" +pesde = "pesde-pkg/pesde@0.7.3+registry.0.2.3" +stylua = "JohnnyMorganz/StyLua@2.5.2" +lute = "luau-lang/lute@1.0.0" +rojo = "rojo-rbx/rojo@7.7.0-rc.1"