From 64ea39e1b3f95d0a08cd7aa4166f1862699d9887 Mon Sep 17 00:00:00 2001 From: znotfireman Date: Sun, 28 Dec 2025 22:13:29 +0700 Subject: [PATCH 1/2] feat: The Great Meme Reset ahh commit (wiping all the files for now so i can manually redo each to support new solver) --- .lune/build.luau | 425 ------------------ .lune/lib/configure.luau | 81 ---- .lune/lib/publish/init.luau | 0 .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 | 160 +++++++ README.md | 1 - dist/bundle.rbxl | Bin 22430 -> 0 bytes dist/bundle.rbxm | Bin 22324 -> 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 910 -> 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.luau | 57 --- .../src/process-dependencies.spec.luau | 67 --- .../dependencies/src/sort-by-priority.luau | 14 - .../src/sort-by-priority.spec.luau | 52 --- dist/npm/dependencies/src/types.luau | 14 - 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 -- dist/npm/lifecycles/src/logger.luau | 6 - .../lifecycles/src/method-to-lifecycles.luau | 5 - dist/npm/lifecycles/src/types.luau | 23 - 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 - .../logger/src/standard-error-info-url.luau | 5 - dist/npm/logger/src/types.luau | 23 - 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/providers/src/provider-classes.luau | 7 - dist/npm/providers/src/types.luau | 12 - 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 | 44 -- 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/init.luau | 24 - 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/runtime/src/types.luau | 13 - 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/depend.luau | 30 -- dist/pesde/luau/dependencies/src/index.d.ts | 25 -- dist/pesde/luau/dependencies/src/init.luau | 12 - dist/pesde/luau/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/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-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/pesde/luau/lifecycles/src/index.d.ts | 45 -- dist/pesde/luau/lifecycles/src/init.luau | 28 -- dist/pesde/luau/lifecycles/src/logger.luau | 6 - .../lifecycles/src/method-to-lifecycles.luau | 5 - .../luau/lifecycles/src/methods/await.luau | 17 - .../luau/lifecycles/src/methods/destroy.luau | 18 - .../lifecycles/src/methods/on-registered.luau | 17 - .../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 - .../luau/logger/src/allow-web-links.luau | 5 - 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 - dist/pesde/luau/logger/src/parse-error.luau | 12 - .../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 | 44 -- 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/rbx-components/src/types.luau | 30 -- 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-finished.luau | 15 - .../luau/roots/src/hooks/root-started.luau | 15 - .../pesde/luau/roots/src/hooks/root-used.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/use-root.luau | 13 - .../luau/roots/src/methods/use-roots.luau | 15 - .../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 - dist/pesde/lune/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/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 - .../src/methods/on-unregistered.luau | 17 - .../lune/lifecycles/src/methods/register.luau | 18 - .../src/methods/unregister-all.luau | 17 - .../lifecycles/src/methods/unregister.luau | 18 - 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/format-log.luau | 43 -- 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/prvdmwrong/src/init.luau | 44 -- 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 - .../rbx-components/src/component-classes.luau | 7 - .../src/component-provider.luau | 185 -------- .../pesde/lune/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/lune/rbx-components/src/init.luau | 24 - .../pesde/lune/rbx-components/src/logger.luau | 8 - 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/lifecycle-used.luau | 16 - .../lune/roots/src/hooks/provider-used.luau | 16 - .../roots/src/hooks/root-constructing.luau | 15 - .../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 -- dist/pesde/lune/roots/src/logger.luau | 7 - .../pesde/lune/roots/src/methods/destroy.luau | 16 - dist/pesde/lune/roots/src/methods/start.luau | 102 ----- .../lune/roots/src/methods/use-lifecycle.luau | 14 - .../roots/src/methods/use-lifecycles.luau | 16 - .../lune/roots/src/methods/use-module.luau | 23 - .../lune/roots/src/methods/use-modules.luau | 28 -- .../lune/roots/src/methods/use-provider.luau | 14 - .../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/roots/src/types.luau | 40 -- dist/pesde/lune/runtime/LICENSE.md | 355 --------------- dist/pesde/lune/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/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/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/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/register.luau | 18 - .../src/methods/unregister-all.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 | 44 -- .../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 - .../src/component-provider.luau | 185 -------- .../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 - .../roots/src/hooks/root-destroyed.luau | 15 - .../roblox/roots/src/hooks/root-finished.luau | 15 - .../roblox/roots/src/hooks/root-started.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 - .../roblox/roots/src/methods/destroy.luau | 16 - .../pesde/roblox/roots/src/methods/start.luau | 102 ----- .../roots/src/methods/use-lifecycle.luau | 14 - .../roots/src/methods/use-lifecycles.luau | 16 - .../roblox/roots/src/methods/use-module.luau | 23 - .../roblox/roots/src/methods/use-modules.luau | 28 -- .../roots/src/methods/use-provider.luau | 14 - .../roots/src/methods/use-providers.luau | 16 - .../roblox/roots/src/methods/use-root.luau | 13 - .../roblox/roots/src/methods/use-roots.luau | 15 - .../roblox/roots/src/methods/will-finish.luau | 8 - .../roblox/roots/src/methods/will-start.luau | 8 - 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 | 44 -- 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 lune/run-example.luau | 0 lune/tiniest.luau | 0 package.json | 48 +- 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 | 44 -- 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 - prvd.config.luau | 32 +- rokit.toml | 2 +- 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 | 2 +- types/g.d.luau | 5 - 849 files changed, 202 insertions(+), 36188 deletions(-) delete mode 100644 .lune/build.luau delete mode 100644 .lune/lib/configure.luau delete mode 100644 .lune/lib/publish/init.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 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.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/dependencies/src/types.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/logger.luau delete mode 100644 dist/npm/lifecycles/src/method-to-lifecycles.luau delete mode 100644 dist/npm/lifecycles/src/types.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/logger/src/standard-error-info-url.luau delete mode 100644 dist/npm/logger/src/types.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/providers/src/provider-classes.luau delete mode 100644 dist/npm/providers/src/types.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/init.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/runtime/src/types.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/depend.luau 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/logger.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.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-concurrent.luau delete mode 100644 dist/pesde/luau/lifecycles/src/handlers/fire-sequential.luau delete mode 100644 dist/pesde/luau/lifecycles/src/hooks/lifecycle-constructed.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/method-to-lifecycles.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/await.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/destroy.luau delete mode 100644 dist/pesde/luau/lifecycles/src/methods/on-registered.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/allow-web-links.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/parse-error.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/rbx-components/src/types.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-finished.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/root-started.luau delete mode 100644 dist/pesde/luau/roots/src/hooks/root-used.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/use-root.luau delete mode 100644 dist/pesde/luau/roots/src/methods/use-roots.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/create.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/hooks/lifecycle-unregistered.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/on-unregistered.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/methods/unregister.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/format-log.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/prvdmwrong/src/init.luau 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-classes.luau delete mode 100644 dist/pesde/lune/rbx-components/src/component-provider.luau delete mode 100644 dist/pesde/lune/rbx-components/src/create.luau delete mode 100644 dist/pesde/lune/rbx-components/src/extend-root/create-component-class-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-component.luau delete mode 100644 dist/pesde/lune/rbx-components/src/extend-root/use-components.luau delete mode 100644 dist/pesde/lune/rbx-components/src/extend-root/use-module-as-component.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/logger.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/lifecycle-used.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/provider-used.luau delete mode 100644 dist/pesde/lune/roots/src/hooks/root-constructing.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/logger.luau delete mode 100644 dist/pesde/lune/roots/src/methods/destroy.luau delete mode 100644 dist/pesde/lune/roots/src/methods/start.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-lifecycle.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-lifecycles.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-module.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-modules.luau delete mode 100644 dist/pesde/lune/roots/src/methods/use-provider.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/roots/src/types.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/batteries/threadpool.luau 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/handlers/fire-sequential.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/hooks/lifecycle-constructed.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/hooks/lifecycle-destroyed.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/hooks/lifecycle-registered.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/register.luau delete mode 100644 dist/pesde/roblox/lifecycles/src/methods/unregister-all.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/component-provider.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-destroyed.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/root-finished.luau delete mode 100644 dist/pesde/roblox/roots/src/hooks/root-started.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/destroy.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-lifecycles.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-providers.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/methods/will-finish.luau delete mode 100644 dist/pesde/roblox/roots/src/methods/will-start.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 lune/run-example.luau delete mode 100644 lune/tiniest.luau 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 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 types/g.d.luau 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/publish/init.luau b/.lune/lib/publish/init.luau deleted file mode 100644 index e69de29b..00000000 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 index 89f14320..5b1926b2 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -2,16 +2,176 @@ // // 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 +// 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 { + "project_name": "Prvd 'M Wrong", + "languages": { + "Luau": { + "formatter": { + "external": { + "command": "stylua", + "arguments": ["-"] + } + } + } + }, "lsp": { "luau-lsp": { "settings": { + // luau-lsp settings. What belongs here is specified below this entire block + // of code and the contents written out are a snapshot. If it seems the snapshot + // is out of date, please file an issue or PR about it. + "luau-lsp": { + // Files that match these globs will not be shown during auto-import + "ignoreGlobs": [] + // "sourcemap": { + // // Whether Rojo sourcemap-related features are enabled + // "enabled": true, + // // Whether we should autogenerate the Rojo sourcemap by calling `rojo sourcemap` + // "autogenerate": true, + // // The project file to generate a sourcemap for + // "rojoProjectFile": "default.project.json", + // // Whether non script instances should be included in the generated sourcemap + // "includeNonScripts": true, + // // The sourcemap file name + // "sourcemapFile": "sourcemap.json" + // }, + // "diagnostics": { + // // Whether to also compute diagnostics for dependents when a file changes + // "includeDependents": true, + // // Whether to compute diagnostics for a whole workspace + // "workspace": false, + // // Whether to use expressive DM types in the diagnostics typechecker + // "strictDatamodelTypes": false + // }, + // "types": { + // // Any definition files to load globally + // "definitionFiles": [], + // // A list of globals to remove from the global scope. Accepts full libraries + // // or particular functions (e.g., `table` or `table.clone`) + // "disabledGlobals": [] + // }, + // "inlayHints": { + // // "none" | "literals" | "all" + // "parameterNames": "none", + // "variableTypes": false, + // "parameterTypes": false, + // "functionReturnTypes": false, + // "hideHintsForErrorTypes": false, + // "hideHintsForMatchingParameterNames": true, + // "typeHintMaxLength": 50, + // // Whether type inlay hints should be made insertable + // "makeInsertable": true + // }, + // "hover": { + // "enabled": true, + // "showTableKinds": false, + // "multilineFunctionDefinitions": false, + // "strictDatamodelTypes": true, + // "includeStringLength": true + // }, + // "completion": { + // "enabled": true, + // // Whether to automatically autocomplete end + // "autocompleteEnd": false, + // // Automatic imports configuration + // "imports": { + // // Whether we should suggest automatic imports in completions + // "enabled": false, + // // Whether services should be suggested in auto-import + // "suggestServices": true, + // // Whether requires should be suggested in auto-import + // "suggestRequires": true, + // // The style of the auto-imported require. + // // "Auto" | "AlwaysRelative" | "AlwaysAbsolute" + // "requireStyle": "Auto", + // "stringRequires": { + // // Whether to use string requires when auto-importing requires (roblox platform only) + // "enabled": false + // }, + // // Whether services and requires should be separated by an empty line + // "separateGroupsWithLine": false, + // // Files that match these globs will not be shown during auto-import + // "ignoreGlobs": [] + // }, + // // Automatically add parentheses to a function call + // "addParentheses": true, + // // If parentheses are added, include a $0 tabstop after the parentheses + // "addTabstopAfterParentheses": true, + // // If parentheses are added, fill call arguments with parameter names + // "fillCallArguments": true, + // // Whether to show non-function properties when performing a method call with a colon + // "showPropertiesOnMethodCall": false, + // // Enables the experimental fragment autocomplete system for performance improvements + // "enableFragmentAutocomplete": false + // }, + // "signatureHelp": { + // "enabled": true + // }, + // "index": { + // // Whether the whole workspace should be indexed. If disabled, only limited support is + // // available for features such as "Find All References" and "Rename" + // "enabled": true, + // // The maximum amount of files that can be indexed + // "maxFiles": 10000 + // } + }, "roblox": { + // Whether or not Roblox-specific features should be enabled. "enabled": true, + // The security level of scripts. + // Must be "roblox_script", "local_user", "plugin" or "none". "security_level": "none", + // Whether or not API documentation should be downloaded and added to luau-lsp. "download_api_documentation": true, + // Whether or not definitions should be downloaded and added to luau-lsp. "download_definitions": true + }, + "fflags": { + // Whether or not all boolean, non-experimental fflags should be enabled + // by default. + "enable_by_default": true, + // Whether or not the new Luau type solver should be enabled. + "enable_new_solver": true, + // Whether or not FFlag values should be synced with Roblox's default + // FFlag values. + // "sync": true, + // FFlags that are forced to some value. + "override": {} + }, + "binary": { + // Whether or not the extension should skip searching for a binary in + // your `$PATH` to use instead of installing one itself. + // "ignore_system_version": false, + // The path to the language server binary you want to force the extension + // to use. + // "path": null, + // Additional arguments to pass to the language server. If you want to + // set exactly which arguments are passed, use `lsp.luau-lsp.binary.path` + // & `lsp.luau-lsp.binary.args` instead. Note that this path does not + // support tilde expansion (`~/...`). + // "args": [] + }, + "plugin": { + // Whether or not Roblox Studio Plugin support should be enabled. If false, the + // extension will use the regular language server binary only, whereas if true, + // it will use, thereby starting an HTTP server, and potentially install + // 4teapo/luau-lsp-proxy as well. This is necessary for plugin support + // to be possible. + // "enabled": false, + // The port number to connect the Roblox Studio Plugin to. + // "port": 3667, + // The path to the luau-lsp-proxy binary you want to force the extension + // to use. If null, the extension tries to install it itself. + // "proxy_path": null } + // Additional definition file paths to pass to the language server. + // "definitions": [], + // Additional documentation file paths to pass to the language server. + // "documentation": [] } } } diff --git a/README.md b/README.md index 4be745a1..b4d0273c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,6 @@ > [!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. diff --git a/dist/bundle.rbxl b/dist/bundle.rbxl deleted file mode 100644 index e6d10b1d80b615148b4a98336d2145e14b1c961a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22430 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 OKKYEfd-N%lRq-F&Na_Uu diff --git a/dist/bundle.rbxm b/dist/bundle.rbxm deleted file mode 100644 index 8317c61382a8b2fd7972db23f30c8d5e9c43498b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22324 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 diff --git a/dist/models/dependencies.rbxm b/dist/models/dependencies.rbxm deleted file mode 100644 index 39687f4d15e7e373b7e1fd2adabc0ee05a8a72c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3238 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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 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 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 a8acdeb37f85d0104fa464aa939268d839c7f3b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmX|AO=uKJ6#lBGyG>UTqbBQ5G^QgvI<1qQxCg}$$Dbsks4->?uIw(M?XF3B?Wr28 ztD{-T>cNXYpy0`?c=F^$5bxqakbqwN!Hb~e7TI0an^wnVAG}xf>izQ7dqYy3O~l2% zYhT-GHw6g3vp$yT$XM-EufFyCr!TF{FKwESizrK2EtGLnEr;cX@re`Tx$DMU(X^C% z!qhw#G#JqZ(3G=LQM9nSA))>I%Bi*!pxtmr}~W#oPiflhIWIxpb7 z#_dqDK(R7)wi4?wthF#66VKiImaOsD;;w$@8oU$rlQ23lTBg)l1pNoruUM#S6ov&4 zGbtHggtZe-Qhz4kQNm>E7g5-S2Q>{A<0=l4U*PP5UBs0<$BYo?)*FADDma@kzb+a3 zgOzkkj^OXez+}p{6F8(V^#{=H_h5Co0_zd!7=YnyhOra4N1p1^sghZ!Vm@6bW`wpr z*t^jY!axPs0DBt>|B{X~FbbPs_d^_td7RGpFwGv=6%dgI|1coZ#x3KyR_5#z& 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 zcmYLN4R~BtnSQ_XbLZYWnK_eWCVx$v+ey;Qw8^CZg=v18CTU6OPnx8qP(wPMxk;v( z%!IjI#lpc{;poy&z8|pbY=8ii>Eo|$VCV2iOkWKA<;GdL&{-I< zqmY@+xx?vVcBWJg#Zd80_Wx~gXxHEu^{BTNhU@ljc;PJcu`@O8Qn~J=3)3@&yqhnz zrE@9IbG?cPPRtYwhqD>CXjH*1x~Y=eU}I5R2V@&20{W#{&p~~#9F1Oe1wJ?Zfemdb zuMM@ei%{#;;|=osdYpT->%m*}m>U`HxH*VT(ZM?JSR z?Uqud)WMt^J2u~{zcemZm9xov1l{!&rqkqZAo$t(YExfXpF{xk3;7jlmH7uHsVu% zU4~1kIniDNxf}G9lcEaiW2C-q1O{g3s!Uonh zZ&%}eUt*@1Eflk*IsIDObgDF&n4Fz(bxbbJr|QX#ZdzE$&(alM)V9ZG^XF)ZGm3Ef z2e`3NjCpQuJlTYmaoegxBr%MN-d_`a6S$V)ZH8*H|Afk}4cJpkO^g)gP}YHO=!Mh9 zX7dxH7r|(B=C|Q^R-2#7r`=t^I>tVZUOi^OLHTG9!J7~o{W;X5gvk6s$X}spq_6|l zL8uWhybqB;OIP=H$SEuxDf|&~6?N;^KM86dO>SnuZg9|>7|Xc&w}mB6s zv8goa=9|!9Ez$FtXS4+B5JK%v=Rtkl4NB8e%UVHl8L>4imd#&4R7ZFaSdXM-#oF-Y z#KBxDJ(bIPC7TyK9l9B(1)-*7@?KFDuO~{;4$CSOH{=+%Mj zenVP5qpj6>&qBQ|1_WIxpBc_hr|p(}lwm+H)_H z5Hu5ablk<`8zk1t=CRgM*{wtE1@M#(t_e5uB=~D&JPu2+ZPm3BmxopV-{O-KZCT z7q#|nOlPvj3yO)5yBuaOs0r$~7E^KP|L7wIlC$uguyl`?!u(&x zW=W%%h@mp^3+8)67>m)H?8|yV&|acF1POHoYKIlBt|#+XP-}?PjgmLS z-(taasZ8c;LGm;89+OL3oj_3i#HO~m9re-0Smk>A*CIT6NU{~dH;m-C2KQWlv8Vy+ zm{W46XL6~MFUT5jIFZdCPUW(=rnSR=K_{S z-e+|P>ot2G)D==zK+sK0ZRCsv3EOlc|3mm??aNm zL;PK{B7PZRtq=EEjp(|OLMSOL2kzT1T{f`()31FAIPmbMfN(+7OTj^0*hpeuGc zaFxxQZBZXu)oNRNnb^tYQm_lr+-fhk$CA!~9oK+%O}A}*P#6uVKB4Q}pvjk0<>)I= zH6rNh&-UbUx1qwj9qJ#k49^0WDppkT60p5!?6SY@PZeEHPjsL1eMIsOQaRs+^le{o z+%Sgxn@63_&Ob6^17~-_Y634XS;562Q{1NU5B$TVN)$A&m#mJ|3@uZeS#`O4oqXSj zE+FchTXM2`!QE+1eB4a5%TVRTUs?ViliF;A{p(@8Y4z!u#4DKZ%f$D~Mad~%9vk3B z7uXGkc>(w?NpF#A;HR% zGlgPl+84av#vF4s3o4Aq`bk_S!tt&uITQJ4BK-m3TA{P(TWoig9OvRvY2Ffvv@b!R zyoz4pI1*94)i^8L+MJPHeY=v*O!07L`be>mpJ;!8o_0NFMgx6n!tJ)V`{XTt_BD)j z4C@+v5!0MeF-^d#;j}uJSBowo{|>=+i8ft;dziS9(@s;a#Z`&1v1~r$9({*v4BJyh z@e1W={OVI;(vZKwiPS+|CR6E>^W8}6uJJTBY78HP@eahbmbE@aYZ$Hz@P7xMVe03w z{0D2~;|Rw!5xpj4{sHm^7Aq8A6EtGTE|{9c+)Tbl*ea(`yvZ_z6y3nrV7|hdZA&{g z!_+oOyc2Q-*jg#7Kxf!m`z(K$1>R%UrhlVb&Tv;^%YXG6d5L3Y#7}+|j9SzYEp&#_IuM2RGnk)1yZ!DNBpSRQAf#R=t9O9{{kO5#S=H(^ zHZj&w<p+jUwAAH+E@5rP7C7m z4C_ODb2+QUWOBgkiA4)&j>g|MecS5T*Gq|AX1%XM zt<|OfqfqOB8gD(=)#U5s3l)Yvz`C{O`>^h9f%QD8i(u7yTA`jmnHM;4Uiv-C)jmVY zj|9*R`bilkXis8nGUaVxq5dr>_rB-wOap(&&(4r~D-z(>M`#O{X51S=r%ZM|R|VMO zbVjR@-7FsF~y>Lh;*c=t}r6 zW|jgwr!*k}o`AU=w4(ugn&@UNMqVd-9aGiXH=2CM7?&Gi_b?4L>KW5#G_#%snJ36e zI`4o*SWjH9{AWWI7^GmEcafXWrLTnjCgWVF{v^wN}uPNNximMj{OD0v! zTvT&vAU|H%Q_N|lib7n=N!uD_v{H-77g?oKk1dXN%W0eGqd<`cKwu(vNp` zz*vpS);od^Ia;VYN3x|!=fF?pdM~zP^D-xXV2$!EhWNum8KfiNr=aetp>_JrJDGe2 zk>Z&e>W2UO)#waX?)X`?@dySzNBi(uBbZr?o2uWaby}LemR3j8{`91i^_*OG%FWF= zDQ8-oqV(TseIu`zL)bqnO!+wRU(ot6_?^aJ6MWw- zUz&8DC|3`_l7|~2$tlonaANTpP;FFgf%2^eUmnqMUB~w?R_n27LaTdC)Q^&Vmgu*< zy7NK7o+KHRz5`PJLSU`-{)p|5l;L-R8sO`NwOguw9Wtih*kLQ5->=!LQ9!tNMcD5` z&It40h`cH^NAxh+;BA4VuS4d5=UdqTTAcZdv1ERN_+GWt>HId>B&p@5V7uFJ854sF zPcc;j3rxYhN169l7+;0l5XRQVNcN;5TZmrq*_R6Tv?ZfpU$8^&I*YAJu&cx7LBUt+ zY=*o}P?y1;HGOy5Oc%|1gxYQuQm4kvwnhS~)*BF_iF9l&4wrpSSV2kmkyrz0=AW*R z7U3%O6JjH|p>N8gFtgF`z<>UH9}`dDb)n!^ynRg9okqx`8VXmy~Q-X^N<-`Tg&h4sN1 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.luau b/dist/npm/dependencies/src/process-dependencies.luau deleted file mode 100644 index 20820a35..00000000 --- a/dist/npm/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/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/dependencies/src/types.luau b/dist/npm/dependencies/src/types.luau deleted file mode 100644 index 2b1c72aa..00000000 --- a/dist/npm/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/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/logger.luau b/dist/npm/lifecycles/src/logger.luau deleted file mode 100644 index 3ae7c27e..00000000 --- a/dist/npm/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/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/lifecycles/src/types.luau b/dist/npm/lifecycles/src/types.luau deleted file mode 100644 index f2931b52..00000000 --- a/dist/npm/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/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/logger/src/standard-error-info-url.luau b/dist/npm/logger/src/standard-error-info-url.luau deleted file mode 100644 index 345faf36..00000000 --- a/dist/npm/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/npm/logger/src/types.luau b/dist/npm/logger/src/types.luau deleted file mode 100644 index d1699037..00000000 --- a/dist/npm/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/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/providers/src/provider-classes.luau b/dist/npm/providers/src/provider-classes.luau deleted file mode 100644 index cc57922f..00000000 --- a/dist/npm/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/npm/providers/src/types.luau b/dist/npm/providers/src/types.luau deleted file mode 100644 index 4f4d4dc9..00000000 --- a/dist/npm/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/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 413e2258..00000000 --- a/dist/npm/prvdmwrong/src/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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/init.luau b/dist/npm/rbx-components/src/init.luau deleted file mode 100644 index 598bcea4..00000000 --- a/dist/npm/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/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/runtime/src/types.luau b/dist/npm/runtime/src/types.luau deleted file mode 100644 index ca050fce..00000000 --- a/dist/npm/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/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/depend.luau b/dist/pesde/luau/dependencies/src/depend.luau deleted file mode 100644 index 55230b4e..00000000 --- a/dist/pesde/luau/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/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/logger.luau b/dist/pesde/luau/dependencies/src/logger.luau deleted file mode 100644 index 22f3b307..00000000 --- a/dist/pesde/luau/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/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.luau b/dist/pesde/luau/dependencies/src/sort-by-priority.luau deleted file mode 100644 index 638468ab..00000000 --- a/dist/pesde/luau/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/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-concurrent.luau b/dist/pesde/luau/lifecycles/src/handlers/fire-concurrent.luau deleted file mode 100644 index f279b888..00000000 --- a/dist/pesde/luau/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/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-constructed.luau b/dist/pesde/luau/lifecycles/src/hooks/lifecycle-constructed.luau deleted file mode 100644 index 8ea4d81b..00000000 --- a/dist/pesde/luau/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/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/method-to-lifecycles.luau b/dist/pesde/luau/lifecycles/src/method-to-lifecycles.luau deleted file mode 100644 index 386a8756..00000000 --- a/dist/pesde/luau/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/luau/lifecycles/src/methods/await.luau b/dist/pesde/luau/lifecycles/src/methods/await.luau deleted file mode 100644 index ed8299d6..00000000 --- a/dist/pesde/luau/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/luau/lifecycles/src/methods/destroy.luau b/dist/pesde/luau/lifecycles/src/methods/destroy.luau deleted file mode 100644 index d9d5d6cc..00000000 --- a/dist/pesde/luau/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/luau/lifecycles/src/methods/on-registered.luau b/dist/pesde/luau/lifecycles/src/methods/on-registered.luau deleted file mode 100644 index 7ddb009a..00000000 --- a/dist/pesde/luau/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/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/allow-web-links.luau b/dist/pesde/luau/logger/src/allow-web-links.luau deleted file mode 100644 index dcd0bb82..00000000 --- a/dist/pesde/luau/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/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/parse-error.luau b/dist/pesde/luau/logger/src/parse-error.luau deleted file mode 100644 index e43fe53d..00000000 --- a/dist/pesde/luau/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/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 413e2258..00000000 --- a/dist/pesde/luau/prvdmwrong/src/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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/rbx-components/src/types.luau b/dist/pesde/luau/rbx-components/src/types.luau deleted file mode 100644 index 5bc17dcf..00000000 --- a/dist/pesde/luau/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/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-finished.luau b/dist/pesde/luau/roots/src/hooks/root-finished.luau deleted file mode 100644 index d3519cea..00000000 --- a/dist/pesde/luau/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/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/hooks/root-used.luau b/dist/pesde/luau/roots/src/hooks/root-used.luau deleted file mode 100644 index 71f172cc..00000000 --- a/dist/pesde/luau/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/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/use-root.luau b/dist/pesde/luau/roots/src/methods/use-root.luau deleted file mode 100644 index efc4ad1e..00000000 --- a/dist/pesde/luau/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/luau/roots/src/methods/use-roots.luau b/dist/pesde/luau/roots/src/methods/use-roots.luau deleted file mode 100644 index 7b5b9dda..00000000 --- a/dist/pesde/luau/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/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/create.luau b/dist/pesde/lune/lifecycles/src/create.luau deleted file mode 100644 index 6cdd2891..00000000 --- a/dist/pesde/lune/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/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/hooks/lifecycle-unregistered.luau b/dist/pesde/lune/lifecycles/src/hooks/lifecycle-unregistered.luau deleted file mode 100644 index 0ec81756..00000000 --- a/dist/pesde/lune/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/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/on-unregistered.luau b/dist/pesde/lune/lifecycles/src/methods/on-unregistered.luau deleted file mode 100644 index 842040ec..00000000 --- a/dist/pesde/lune/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/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/methods/unregister.luau b/dist/pesde/lune/lifecycles/src/methods/unregister.luau deleted file mode 100644 index 0ca7223f..00000000 --- a/dist/pesde/lune/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/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/format-log.luau b/dist/pesde/lune/logger/src/format-log.luau deleted file mode 100644 index 3eeda21b..00000000 --- a/dist/pesde/lune/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/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/prvdmwrong/src/init.luau b/dist/pesde/lune/prvdmwrong/src/init.luau deleted file mode 100644 index 413e2258..00000000 --- a/dist/pesde/lune/prvdmwrong/src/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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-classes.luau b/dist/pesde/lune/rbx-components/src/component-classes.luau deleted file mode 100644 index 0dcdb30a..00000000 --- a/dist/pesde/lune/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/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/create.luau b/dist/pesde/lune/rbx-components/src/create.luau deleted file mode 100644 index 24d39a3b..00000000 --- a/dist/pesde/lune/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/lune/rbx-components/src/extend-root/create-component-class-provider.luau b/dist/pesde/lune/rbx-components/src/extend-root/create-component-class-provider.luau deleted file mode 100644 index 9d5ae999..00000000 --- a/dist/pesde/lune/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/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-component.luau b/dist/pesde/lune/rbx-components/src/extend-root/use-component.luau deleted file mode 100644 index b0bd8d1f..00000000 --- a/dist/pesde/lune/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/lune/rbx-components/src/extend-root/use-components.luau b/dist/pesde/lune/rbx-components/src/extend-root/use-components.luau deleted file mode 100644 index 809a4006..00000000 --- a/dist/pesde/lune/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/lune/rbx-components/src/extend-root/use-module-as-component.luau b/dist/pesde/lune/rbx-components/src/extend-root/use-module-as-component.luau deleted file mode 100644 index 46724fe7..00000000 --- a/dist/pesde/lune/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/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/logger.luau b/dist/pesde/lune/rbx-components/src/logger.luau deleted file mode 100644 index edcc7fac..00000000 --- a/dist/pesde/lune/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/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/lifecycle-used.luau b/dist/pesde/lune/roots/src/hooks/lifecycle-used.luau deleted file mode 100644 index bd29276a..00000000 --- a/dist/pesde/lune/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/lune/roots/src/hooks/provider-used.luau b/dist/pesde/lune/roots/src/hooks/provider-used.luau deleted file mode 100644 index dac2573c..00000000 --- a/dist/pesde/lune/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/lune/roots/src/hooks/root-constructing.luau b/dist/pesde/lune/roots/src/hooks/root-constructing.luau deleted file mode 100644 index 5fb8b819..00000000 --- a/dist/pesde/lune/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/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/logger.luau b/dist/pesde/lune/roots/src/logger.luau deleted file mode 100644 index 92e611ef..00000000 --- a/dist/pesde/lune/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/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/start.luau b/dist/pesde/lune/roots/src/methods/start.luau deleted file mode 100644 index 3f24dac5..00000000 --- a/dist/pesde/lune/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/lune/roots/src/methods/use-lifecycle.luau b/dist/pesde/lune/roots/src/methods/use-lifecycle.luau deleted file mode 100644 index 862c2d07..00000000 --- a/dist/pesde/lune/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/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-module.luau b/dist/pesde/lune/roots/src/methods/use-module.luau deleted file mode 100644 index a96b3d17..00000000 --- a/dist/pesde/lune/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/lune/roots/src/methods/use-modules.luau b/dist/pesde/lune/roots/src/methods/use-modules.luau deleted file mode 100644 index 8354a9d0..00000000 --- a/dist/pesde/lune/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/lune/roots/src/methods/use-provider.luau b/dist/pesde/lune/roots/src/methods/use-provider.luau deleted file mode 100644 index 277d8049..00000000 --- a/dist/pesde/lune/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/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/roots/src/types.luau b/dist/pesde/lune/roots/src/types.luau deleted file mode 100644 index 104143c4..00000000 --- a/dist/pesde/lune/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/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/batteries/threadpool.luau b/dist/pesde/lune/runtime/src/batteries/threadpool.luau deleted file mode 100644 index 6caf08b4..00000000 --- a/dist/pesde/lune/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/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/handlers/fire-sequential.luau b/dist/pesde/roblox/lifecycles/src/handlers/fire-sequential.luau deleted file mode 100644 index 80911ad9..00000000 --- a/dist/pesde/roblox/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/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-destroyed.luau b/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-destroyed.luau deleted file mode 100644 index 47abcfab..00000000 --- a/dist/pesde/roblox/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/roblox/lifecycles/src/hooks/lifecycle-registered.luau b/dist/pesde/roblox/lifecycles/src/hooks/lifecycle-registered.luau deleted file mode 100644 index fab588a3..00000000 --- a/dist/pesde/roblox/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/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/register.luau b/dist/pesde/roblox/lifecycles/src/methods/register.luau deleted file mode 100644 index 3fd74d56..00000000 --- a/dist/pesde/roblox/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/roblox/lifecycles/src/methods/unregister-all.luau b/dist/pesde/roblox/lifecycles/src/methods/unregister-all.luau deleted file mode 100644 index 5e6235af..00000000 --- a/dist/pesde/roblox/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/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 413e2258..00000000 --- a/dist/pesde/roblox/prvdmwrong/src/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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/component-provider.luau b/dist/pesde/roblox/rbx-components/src/component-provider.luau deleted file mode 100644 index 85af0d0d..00000000 --- a/dist/pesde/roblox/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/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-destroyed.luau b/dist/pesde/roblox/roots/src/hooks/root-destroyed.luau deleted file mode 100644 index 10b79b54..00000000 --- a/dist/pesde/roblox/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/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-started.luau b/dist/pesde/roblox/roots/src/hooks/root-started.luau deleted file mode 100644 index 2ae6f90c..00000000 --- a/dist/pesde/roblox/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/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/destroy.luau b/dist/pesde/roblox/roots/src/methods/destroy.luau deleted file mode 100644 index 0c62a935..00000000 --- a/dist/pesde/roblox/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/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-lifecycles.luau b/dist/pesde/roblox/roots/src/methods/use-lifecycles.luau deleted file mode 100644 index 3f12341f..00000000 --- a/dist/pesde/roblox/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/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-providers.luau b/dist/pesde/roblox/roots/src/methods/use-providers.luau deleted file mode 100644 index 1489c3a3..00000000 --- a/dist/pesde/roblox/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/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/methods/will-finish.luau b/dist/pesde/roblox/roots/src/methods/will-finish.luau deleted file mode 100644 index 893088f4..00000000 --- a/dist/pesde/roblox/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/roblox/roots/src/methods/will-start.luau b/dist/pesde/roblox/roots/src/methods/will-start.luau deleted file mode 100644 index 7c3d88c3..00000000 --- a/dist/pesde/roblox/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/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 413e2258..00000000 --- a/dist/wally/prvdmwrong/src/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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/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 index 38c80717..a68e888a 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,25 @@ { - "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 + "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" + } +} 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 413e2258..00000000 --- a/packages/prvdmwrong/init.luau +++ /dev/null @@ -1,44 +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, - }), -} - -local mt = {} - -function mt.__call(_, provider: Self): providers.Provider - return providers.create(provider) :: any -end - -table.freeze(mt) -return setmetatable(prvd, mt) 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/prvd.config.luau b/prvd.config.luau index 9282af01..0d08e9d7 100644 --- a/prvd.config.luau +++ b/prvd.config.luau @@ -1,17 +1,17 @@ -local configure = require("@lune-lib/configure") +-- 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 = "" }), - }, -}) +-- 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/rokit.toml b/rokit.toml index f44178d6..86a146b8 100644 --- a/rokit.toml +++ b/rokit.toml @@ -4,7 +4,7 @@ # New tools can be added by running `rokit add ` in a terminal. [tools] -stylua = "JohnnyMorganz/StyLua@2.3.1" +StyLua = "JohnnyMorganz/StyLua@2.3.1" luau-lsp = "JohnnyMorganz/luau-lsp@1.58.0" rojo = "rojo-rbx/rojo@7.6.1" # Runtimes 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 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

&)#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 index 77fa854a..26bd9ac7 100644 --- a/stylua.toml +++ b/stylua.toml @@ -1,4 +1,4 @@ syntax = "Luau" [sort_requires] - enabled = true +enabled = true 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 79680e8358c907908320a5b6d2d186634e97c395 Mon Sep 17 00:00:00 2001 From: znotfireman Date: Sun, 28 Dec 2025 22:41:26 +0700 Subject: [PATCH 2/2] feat: new solver support --- build.luau | 425 ++++++++++++++++++ monarch/init.luau | 1 + 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/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 | 21 + .../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 | 21 + packages/logger/allow-web-links.luau | 1 + packages/logger/create.luau | 33 ++ packages/logger/format-log.luau | 43 ++ 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/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/init.luau | 45 ++ packages/prvdmwrong/prvd.config.luau | 20 + 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/init.luau | 28 ++ packages/roots/logger.luau | 7 + packages/roots/methods/destroy.luau | 16 + packages/roots/methods/start.luau | 99 ++++ 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 | 36 ++ packages/runtime/init.luau | 11 + packages/runtime/prvd.config.luau | 10 + packages/runtime/types.luau | 13 + packages/typecheckers/init.luau | 0 packages/typecheckers/prvd.config.luau | 6 + 80 files changed, 2033 insertions(+) create mode 100644 build.luau create mode 100644 monarch/init.luau create mode 100644 packages/dependencies/depend.luau create mode 100644 packages/dependencies/index.d.ts create mode 100644 packages/dependencies/init.luau create mode 100644 packages/dependencies/logger.luau create mode 100644 packages/dependencies/process-dependencies.luau create mode 100644 packages/dependencies/process-dependencies.spec.luau create mode 100644 packages/dependencies/prvd.config.luau create mode 100644 packages/dependencies/sort-by-priority.luau create mode 100644 packages/dependencies/sort-by-priority.spec.luau create mode 100644 packages/dependencies/types.luau create mode 100644 packages/lifecycles/create.luau create mode 100644 packages/lifecycles/handlers/fire-concurrent.luau create mode 100644 packages/lifecycles/handlers/fire-sequential.luau create mode 100644 packages/lifecycles/hooks/lifecycle-constructed.luau create mode 100644 packages/lifecycles/hooks/lifecycle-destroyed.luau create mode 100644 packages/lifecycles/hooks/lifecycle-registered.luau create mode 100644 packages/lifecycles/hooks/lifecycle-unregistered.luau create mode 100644 packages/lifecycles/init.luau create mode 100644 packages/lifecycles/logger.luau create mode 100644 packages/lifecycles/method-to-lifecycles.luau create mode 100644 packages/lifecycles/methods/await.luau create mode 100644 packages/lifecycles/methods/destroy.luau create mode 100644 packages/lifecycles/methods/on-registered.luau create mode 100644 packages/lifecycles/methods/on-unregistered.luau create mode 100644 packages/lifecycles/methods/register.luau create mode 100644 packages/lifecycles/methods/unregister-all.luau create mode 100644 packages/lifecycles/methods/unregister.luau create mode 100644 packages/lifecycles/prvd.config.luau create mode 100644 packages/lifecycles/types.luau create mode 100644 packages/logger/allow-web-links.luau create mode 100644 packages/logger/create.luau create mode 100644 packages/logger/format-log.luau create mode 100644 packages/logger/init.luau create mode 100644 packages/logger/parse-error.luau create mode 100644 packages/logger/prvd.config.luau create mode 100644 packages/logger/standard-error-info-url.luau create mode 100644 packages/logger/types.luau create mode 100644 packages/providers/README.md create mode 100644 packages/providers/create.luau create mode 100644 packages/providers/init.luau create mode 100644 packages/providers/name-of.luau create mode 100644 packages/providers/provider-classes.luau create mode 100644 packages/providers/prvd.config.luau create mode 100644 packages/providers/types.luau create mode 100644 packages/prvdmwrong/init.luau create mode 100644 packages/prvdmwrong/prvd.config.luau create mode 100644 packages/rbx-lifecycles/init.luau create mode 100644 packages/rbx-lifecycles/prvd.config.luau create mode 100644 packages/roots/create.luau create mode 100644 packages/roots/hooks/lifecycle-used.luau create mode 100644 packages/roots/hooks/provider-used.luau create mode 100644 packages/roots/hooks/root-constructing.luau create mode 100644 packages/roots/hooks/root-destroyed.luau create mode 100644 packages/roots/hooks/root-finished.luau create mode 100644 packages/roots/hooks/root-started.luau create mode 100644 packages/roots/hooks/root-used.luau create mode 100644 packages/roots/init.luau create mode 100644 packages/roots/logger.luau create mode 100644 packages/roots/methods/destroy.luau create mode 100644 packages/roots/methods/start.luau create mode 100644 packages/roots/methods/use-lifecycle.luau create mode 100644 packages/roots/methods/use-lifecycles.luau create mode 100644 packages/roots/methods/use-module.luau create mode 100644 packages/roots/methods/use-modules.luau create mode 100644 packages/roots/methods/use-provider.luau create mode 100644 packages/roots/methods/use-providers.luau create mode 100644 packages/roots/methods/use-root.luau create mode 100644 packages/roots/methods/use-roots.luau create mode 100644 packages/roots/methods/will-finish.luau create mode 100644 packages/roots/methods/will-start.luau create mode 100644 packages/roots/prvd.config.luau create mode 100644 packages/roots/types.luau create mode 100644 packages/runtime/batteries/threadpool.luau create mode 100644 packages/runtime/init.luau create mode 100644 packages/runtime/prvd.config.luau create mode 100644 packages/runtime/types.luau create mode 100644 packages/typecheckers/init.luau create mode 100644 packages/typecheckers/prvd.config.luau diff --git a/build.luau b/build.luau new file mode 100644 index 00000000..dcc71110 --- /dev/null +++ b/build.luau @@ -0,0 +1,425 @@ +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/monarch/init.luau b/monarch/init.luau new file mode 100644 index 00000000..90aceeae --- /dev/null +++ b/monarch/init.luau @@ -0,0 +1 @@ +-- Monarch: A CLI to manage the Prvd 'M Wrong monorepo diff --git a/packages/dependencies/depend.luau b/packages/dependencies/depend.luau new file mode 100644 index 00000000..55230b4e --- /dev/null +++ b/packages/dependencies/depend.luau @@ -0,0 +1,30 @@ +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 new file mode 100644 index 00000000..a5bddcde --- /dev/null +++ b/packages/dependencies/index.d.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 00000000..e6b27b24 --- /dev/null +++ b/packages/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/packages/dependencies/logger.luau b/packages/dependencies/logger.luau new file mode 100644 index 00000000..22f3b307 --- /dev/null +++ b/packages/dependencies/logger.luau @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000..20820a35 --- /dev/null +++ b/packages/dependencies/process-dependencies.luau @@ -0,0 +1,57 @@ +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 new file mode 100644 index 00000000..0fcfcac8 --- /dev/null +++ b/packages/dependencies/process-dependencies.spec.luau @@ -0,0 +1,67 @@ +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 new file mode 100644 index 00000000..f265b2db --- /dev/null +++ b/packages/dependencies/prvd.config.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..638468ab --- /dev/null +++ b/packages/dependencies/sort-by-priority.luau @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..eeb34933 --- /dev/null +++ b/packages/dependencies/sort-by-priority.spec.luau @@ -0,0 +1,52 @@ +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 new file mode 100644 index 00000000..2b1c72aa --- /dev/null +++ b/packages/dependencies/types.luau @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..fb8f5688 --- /dev/null +++ b/packages/lifecycles/create.luau @@ -0,0 +1,45 @@ +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.Lifecycle = { + _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 :: types.Lifecycle) + + 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 new file mode 100644 index 00000000..f279b888 --- /dev/null +++ b/packages/lifecycles/handlers/fire-concurrent.luau @@ -0,0 +1,10 @@ +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 new file mode 100644 index 00000000..80911ad9 --- /dev/null +++ b/packages/lifecycles/handlers/fire-sequential.luau @@ -0,0 +1,9 @@ +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 new file mode 100644 index 00000000..8ea4d81b --- /dev/null +++ b/packages/lifecycles/hooks/lifecycle-constructed.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..47abcfab --- /dev/null +++ b/packages/lifecycles/hooks/lifecycle-destroyed.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..e303e8a7 --- /dev/null +++ b/packages/lifecycles/hooks/lifecycle-registered.luau @@ -0,0 +1,20 @@ +local types = require("../types") + +local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} + +local function onLifecycleRegistered( + listener: ( + lifecycle: types.Lifecycle, + callback: (Args...) -> () + ) -> () +): () -> () + table.insert(callbacks :: any, listener) + return function() + table.remove(callbacks, table.find(callbacks :: any, listener)) + 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 new file mode 100644 index 00000000..bca08e7f --- /dev/null +++ b/packages/lifecycles/hooks/lifecycle-unregistered.luau @@ -0,0 +1,20 @@ +local types = require("../types") + +local callbacks: { (lifecycle: types.Lifecycle, callback: (...unknown) -> ()) -> () } = {} + +local function onLifecycleUnregistered( + listener: ( + lifecycle: types.Lifecycle, + callback: (Args...) -> () + ) -> () +): () -> () + table.insert(callbacks :: any, listener) + return function() + table.remove(callbacks, table.find(callbacks :: any, listener)) + end +end + +return table.freeze({ + callbacks = callbacks, + onLifecycleUnregistered = onLifecycleUnregistered, +}) diff --git a/packages/lifecycles/init.luau b/packages/lifecycles/init.luau new file mode 100644 index 00000000..dbec091b --- /dev/null +++ b/packages/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/packages/lifecycles/logger.luau b/packages/lifecycles/logger.luau new file mode 100644 index 00000000..3ae7c27e --- /dev/null +++ b/packages/lifecycles/logger.luau @@ -0,0 +1,6 @@ +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 new file mode 100644 index 00000000..386a8756 --- /dev/null +++ b/packages/lifecycles/method-to-lifecycles.luau @@ -0,0 +1,5 @@ +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 new file mode 100644 index 00000000..505a7843 --- /dev/null +++ b/packages/lifecycles/methods/await.luau @@ -0,0 +1,17 @@ +local logger = require("../logger") +local types = require("../types") + +local function await(lifecycle: types.Lifecycle): Args... + if lifecycle._isDestroyed then + logger:fatalError({ template = logger.useAfterDestroy }) + end + local currentThread = coroutine.running() + local function callback(...: Args...) + (lifecycle :: any):unregister(callback) + coroutine.resume(currentThread, ...) + end + (lifecycle :: any):register(callback) + return coroutine.yield() +end + +return await diff --git a/packages/lifecycles/methods/destroy.luau b/packages/lifecycles/methods/destroy.luau new file mode 100644 index 00000000..d003d0ab --- /dev/null +++ b/packages/lifecycles/methods/destroy.luau @@ -0,0 +1,21 @@ +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.Lifecycle) + if lifecycle._isDestroyed then + logger:fatalError({ template = logger.alreadyDestroyed }) + end + table.remove( + methodToLifecycles[lifecycle.method], + table.find(methodToLifecycles[lifecycle.method], lifecycle :: types.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 new file mode 100644 index 00000000..b9ca1a99 --- /dev/null +++ b/packages/lifecycles/methods/on-registered.luau @@ -0,0 +1,17 @@ +local logger = require("../logger") +local types = require("../types") + +local function onRegistered(lifecycle: types.Lifecycle, 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 new file mode 100644 index 00000000..dca485ce --- /dev/null +++ b/packages/lifecycles/methods/on-unregistered.luau @@ -0,0 +1,17 @@ +local logger = require("../logger") +local types = require("../types") + +local function onUnregistered(lifecycle: types.Lifecycle, 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 new file mode 100644 index 00000000..29d4a83d --- /dev/null +++ b/packages/lifecycles/methods/register.luau @@ -0,0 +1,18 @@ +local logger = require("../logger") +local runtime = require("../../runtime") +local types = require("../types") + +local threadpool = runtime.threadpool + +local function register(lifecycle: types.Lifecycle, 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 new file mode 100644 index 00000000..ab933d31 --- /dev/null +++ b/packages/lifecycles/methods/unregister-all.luau @@ -0,0 +1,17 @@ +local logger = require("../logger") +local runtime = require("../../runtime") +local types = require("../types") + +local threadpool = runtime.threadpool + +local function clear(lifecycle: types.Lifecycle) + 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 new file mode 100644 index 00000000..347e80e4 --- /dev/null +++ b/packages/lifecycles/methods/unregister.luau @@ -0,0 +1,18 @@ +local logger = require("../logger") +local runtime = require("../../runtime") +local types = require("../types") + +local threadpool = runtime.threadpool + +local function unregister(lifecycle: types.Lifecycle, 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 new file mode 100644 index 00000000..fc83a55e --- /dev/null +++ b/packages/lifecycles/prvd.config.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..a829f769 --- /dev/null +++ b/packages/lifecycles/types.luau @@ -0,0 +1,21 @@ +export type Lifecycle = { + _isDestroyed: boolean, + _selfRegistered: { (callback: (Args...) -> ()) -> () }, + _selfUnregistered: { (callback: (Args...) -> ()) -> () }, + + 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) -> (), +} + +return nil diff --git a/packages/logger/allow-web-links.luau b/packages/logger/allow-web-links.luau new file mode 100644 index 00000000..7ddb1472 --- /dev/null +++ b/packages/logger/allow-web-links.luau @@ -0,0 +1 @@ +return game:GetService("RunService"):IsStudio() diff --git a/packages/logger/create.luau b/packages/logger/create.luau new file mode 100644 index 00000000..86f330e8 --- /dev/null +++ b/packages/logger/create.luau @@ -0,0 +1,33 @@ +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) + -- LUAU: ...YOU CANT ERROR A STRING ANYMORE?? + task.spawn(error, label .. formatLog(self, log, errorInfoUrl) :: any, 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 new file mode 100644 index 00000000..3fea2d61 --- /dev/null +++ b/packages/logger/format-log.luau @@ -0,0 +1,43 @@ +local types = require("./types") + +local function formatLog(self: types.Logger, log: types.Log, errorInfoUrl: string?): string + local formattedTemplate = string.format(log.template :: any, 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/init.luau b/packages/logger/init.luau new file mode 100644 index 00000000..52760a5d --- /dev/null +++ b/packages/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/packages/logger/parse-error.luau b/packages/logger/parse-error.luau new file mode 100644 index 00000000..95218207 --- /dev/null +++ b/packages/logger/parse-error.luau @@ -0,0 +1,12 @@ +local types = require("./types") + +local function parseError(err: string): types.Error + return { + type = "Error", + raw = err, + message = string.gsub(err, "^.+:%d+:%s*", ""), + trace = debug.traceback(nil, 2), + } +end + +return parseError diff --git a/packages/logger/prvd.config.luau b/packages/logger/prvd.config.luau new file mode 100644 index 00000000..11c071ba --- /dev/null +++ b/packages/logger/prvd.config.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..345faf36 --- /dev/null +++ b/packages/logger/standard-error-info-url.luau @@ -0,0 +1,5 @@ +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 new file mode 100644 index 00000000..d1699037 --- /dev/null +++ b/packages/logger/types.luau @@ -0,0 +1,23 @@ +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 new file mode 100644 index 00000000..e69de29b diff --git a/packages/providers/create.luau b/packages/providers/create.luau new file mode 100644 index 00000000..dd44dbd5 --- /dev/null +++ b/packages/providers/create.luau @@ -0,0 +1,30 @@ +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 + provider.new = function(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/init.luau b/packages/providers/init.luau new file mode 100644 index 00000000..d678d850 --- /dev/null +++ b/packages/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/packages/providers/name-of.luau b/packages/providers/name-of.luau new file mode 100644 index 00000000..3f86ceec --- /dev/null +++ b/packages/providers/name-of.luau @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000..cc57922f --- /dev/null +++ b/packages/providers/provider-classes.luau @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000..5d8b602f --- /dev/null +++ b/packages/providers/prvd.config.luau @@ -0,0 +1,17 @@ +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 new file mode 100644 index 00000000..4f4d4dc9 --- /dev/null +++ b/packages/providers/types.luau @@ -0,0 +1,12 @@ +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/init.luau b/packages/prvdmwrong/init.luau new file mode 100644 index 00000000..1381801d --- /dev/null +++ b/packages/prvdmwrong/init.luau @@ -0,0 +1,45 @@ +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 new file mode 100644 index 00000000..b094986a --- /dev/null +++ b/packages/prvdmwrong/prvd.config.luau @@ -0,0 +1,20 @@ +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-lifecycles/init.luau b/packages/rbx-lifecycles/init.luau new file mode 100644 index 00000000..c1243680 --- /dev/null +++ b/packages/rbx-lifecycles/init.luau @@ -0,0 +1,67 @@ +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 new file mode 100644 index 00000000..5f590508 --- /dev/null +++ b/packages/rbx-lifecycles/prvd.config.luau @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..26c14f4e --- /dev/null +++ b/packages/roots/create.luau @@ -0,0 +1,47 @@ +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 new file mode 100644 index 00000000..bd29276a --- /dev/null +++ b/packages/roots/hooks/lifecycle-used.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..dac2573c --- /dev/null +++ b/packages/roots/hooks/provider-used.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..5fb8b819 --- /dev/null +++ b/packages/roots/hooks/root-constructing.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..10b79b54 --- /dev/null +++ b/packages/roots/hooks/root-destroyed.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..d3519cea --- /dev/null +++ b/packages/roots/hooks/root-finished.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..2ae6f90c --- /dev/null +++ b/packages/roots/hooks/root-started.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..71f172cc --- /dev/null +++ b/packages/roots/hooks/root-used.luau @@ -0,0 +1,15 @@ +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/init.luau b/packages/roots/init.luau new file mode 100644 index 00000000..f6aa7495 --- /dev/null +++ b/packages/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/packages/roots/logger.luau b/packages/roots/logger.luau new file mode 100644 index 00000000..92e611ef --- /dev/null +++ b/packages/roots/logger.luau @@ -0,0 +1,7 @@ +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 new file mode 100644 index 00000000..0c62a935 --- /dev/null +++ b/packages/roots/methods/destroy.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..1da105cb --- /dev/null +++ b/packages/roots/methods/start.luau @@ -0,0 +1,99 @@ +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: (self: any, ...any) -> () = (provider :: any)[lifecycle.method] + if typeof(lifecycleMethod) == "function" then + local isProfiling = _G.PRVDMWRONG_PROFILE_LIFECYCLES + + if isProfiling then + lifecycle:register(function(...) + local memoryCategory = providers.nameOf(provider) .. ":" .. lifecycle.method + 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 start(root: types.Self): types.StartedRoot + local processed = dependencies.processDependencies(root._rootProviders :: any) + local sortedProviders = processed.sortedDependencies :: { providers.Provider } + local processedLifecycles = processed.lifecycles + table.move(root._rootLifecycles, 1, #root._rootLifecycles, #processedLifecycles + 1, processedLifecycles) + + dependencies.sortByPriority(sortedProviders :: any) + + 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 :: any)(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 + logger:fatalError({ template = logger.alreadyFinished }) + return + 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 new file mode 100644 index 00000000..862c2d07 --- /dev/null +++ b/packages/roots/methods/use-lifecycle.luau @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..3f12341f --- /dev/null +++ b/packages/roots/methods/use-lifecycles.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..a96b3d17 --- /dev/null +++ b/packages/roots/methods/use-module.luau @@ -0,0 +1,23 @@ +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 new file mode 100644 index 00000000..8354a9d0 --- /dev/null +++ b/packages/roots/methods/use-modules.luau @@ -0,0 +1,28 @@ +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 new file mode 100644 index 00000000..277d8049 --- /dev/null +++ b/packages/roots/methods/use-provider.luau @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..1489c3a3 --- /dev/null +++ b/packages/roots/methods/use-providers.luau @@ -0,0 +1,16 @@ +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 new file mode 100644 index 00000000..efc4ad1e --- /dev/null +++ b/packages/roots/methods/use-root.luau @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000..7b5b9dda --- /dev/null +++ b/packages/roots/methods/use-roots.luau @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..893088f4 --- /dev/null +++ b/packages/roots/methods/will-finish.luau @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000..7c3d88c3 --- /dev/null +++ b/packages/roots/methods/will-start.luau @@ -0,0 +1,8 @@ +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 new file mode 100644 index 00000000..9391d60d --- /dev/null +++ b/packages/roots/prvd.config.luau @@ -0,0 +1,19 @@ +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 new file mode 100644 index 00000000..104143c4 --- /dev/null +++ b/packages/roots/types.luau @@ -0,0 +1,40 @@ +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 new file mode 100644 index 00000000..5b73229b --- /dev/null +++ b/packages/runtime/batteries/threadpool.luau @@ -0,0 +1,36 @@ +local freeThreads: { thread } = {} + +local function run(f: (T...) -> (), thread: thread, ...) + f(...) + table.insert(freeThreads, thread) +end + +local function yielder() + while true do + (run :: any)(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/init.luau b/packages/runtime/init.luau new file mode 100644 index 00000000..20498372 --- /dev/null +++ b/packages/runtime/init.luau @@ -0,0 +1,11 @@ +local threadpool = require("@self/batteries/threadpool") + +-- TODO 0.3: support other runtimes +return table.freeze({ + name = "Roblox", + + task = task, + warn = warn, + + threadpool = threadpool, +}) diff --git a/packages/runtime/prvd.config.luau b/packages/runtime/prvd.config.luau new file mode 100644 index 00000000..b171ea71 --- /dev/null +++ b/packages/runtime/prvd.config.luau @@ -0,0 +1,10 @@ +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 new file mode 100644 index 00000000..ca050fce --- /dev/null +++ b/packages/runtime/types.luau @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000..e69de29b diff --git a/packages/typecheckers/prvd.config.luau b/packages/typecheckers/prvd.config.luau new file mode 100644 index 00000000..00a3fba7 --- /dev/null +++ b/packages/typecheckers/prvd.config.luau @@ -0,0 +1,6 @@ +local configure = require("@lune-lib/configure") + +return configure.package({ + name = "typecheckers", + description = "Typechecking primitives and compatibility for Prvd 'M Wrong", +})